2010-01-28 32 views
15

Tôi chưa bao giờ thấy cách gửi yêu cầu PUT/DELETE.Làm thế nào để bắt đầu một yêu cầu GET/POST/PUT/DELETE và loại yêu cầu thẩm phán trong PHP?

Cách thực hiện trong PHP?

tôi biết làm thế nào để gửi một GET/POST yêu cầu với curl:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_POST, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 4); 

Nhưng làm thế nào để làm PUT/DELETE yêu cầu?

+0

Để có được một yêu cầu PUT, bạn không thể làm $ _PUT [ 'var'], nhưng: 'parse_str (file_get_contents ('php: // input'), $ put_vars);' – Strae

+0

'$ _PUT' sẽ thất bại, nhưng' php: // input' hoạt động. – user198729

Trả lời

46

Đối DELETE sử dụng curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
Đối PUT sử dụng curl_setopt($ch, CURLOPT_PUT, true);

Một thay thế mà không dựa vào cURL đang được cài đặt sẽ được sử dụng file_get_contents với một custom HTTP stream context.

$result = file_get_contents(
    'http://example.com/submit.php', 
    false, 
    stream_context_create(array(
     'http' => array(
      'method' => 'DELETE' 
     ) 
    )) 
); 

Check-out hai bài báo này trên làm REST với PHP

+0

Nó hoạt động và tôi đã bỏ phiếu cho điều đó, nhưng nhược điểm là 'mở url từ xa' thông qua file_get_contents có thể bị chặn trong cấu hình và được tính đến – Ekonoval

+0

@Ekonoval, giống như nó phải được xem xét rằng cURL có thể không được cài đặt :) – Gordon

3

Nói chung, nếu bạn muốn gửi một số yêu cầu "-GET non", bạn sẽ thường xuyên làm việc với curl.


Và bạn sẽ sử dụng chức năng curl_setopt để định cấu hình yêu cầu bạn đang gửi; trong số những số lượng lớn các tùy chọn có thể, thay đổi phương thức yêu cầu, bạn sẽ được quan tâm bởi ít nhất là những tùy chọn (trích dẫn):

  • CURLOPT_CUSTOMREQUEST: Một phương thức yêu cầu tùy chỉnh để sử dụng thay vì "GET" hoặc "HEAD" khi thực hiện yêu cầu HTTP. Điều này hữu ích khi thực hiện "DELETE" hoặc các yêu cầu HTTP khác ít được biết đến hơn.
  • CURLOPT_HTTPGET: TRUE để đặt lại phương thức yêu cầu HTTP thành GET.
  • CURLOPT_POST: TRUE để thực hiện HTTP thông thường POST.
  • CURLOPT_PUT: TRUE thành HTTP PUT một tệp. Tệp phải là PUT phải được đặt bằng CURLOPT_INFILECURLOPT_INFILESIZE.


Tất nhiên, curl_setopt không phải là chức năng duy nhất bạn sẽ sử dụng; xem trang tài liệu của curl_exec để biết ví dụ về cách gửi yêu cầu với curl.

(Vâng, ví dụ đó là khá đơn giản, và gửi một yêu cầu GET - nhưng bạn sẽ có thể xây dựng từ đó ;-))

+0

'CURLOPT_POST' được sử dụng để gửi yêu cầu GET/DELETE, còn PUT/DELETE thì sao? – user198729

+0

cho PUT, bạn có 'CURLOPT_PUT' và DELETE, có vẻ như bạn sẽ phải sử dụng' CURLOPT_CUSTOMREQUEST' –

+1

đúng. Đó là những gì nó nói trong bài viết thứ hai tôi đã liên kết là tốt. – Gordon

Các vấn đề liên quan