Cách chuyển từ POST sang GET trong PHP CURL


83

Tôi đã thử chuyển từ yêu cầu Đăng trước đó sang yêu cầu Nhận. Giả sử nó là một Get nhưng cuối cùng vẫn đăng.

Tôi đã thử những điều sau trong PHP:

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);

Tôi đang thiếu gì?

Thông tin bổ sung: Tôi đã có kết nối được thiết lập để thực hiện yêu cầu ĐĂNG. Điều đó hoàn tất thành công nhưng sau đó khi tôi cố gắng sử dụng lại kết nối và chuyển trở lại GET bằng cách sử dụng setopts ở trên, nó vẫn thực hiện một BÀI ĐĂNG nội bộ với tiêu đề POST không hoàn chỉnh. Vấn đề là nó tin rằng nó đang thực hiện GET nhưng cuối cùng lại đặt tiêu đề POST mà không có tham số độ dài nội dung và kết nối không thành công với 411 ERROR.


3
Hãy cẩn thận với Nhận yêu cầu. Google rất vui với họ. ;)
NotMe

10
@Chris - một người bạn đã phát hiện ra rằng cách khó khi anh ấy xây dựng một trang web quản lý nội dung do người dùng đóng góp thông qua yêu cầu GET. Googlebot vui vẻ theo dõi tất cả các liên kết 'xóa', với kết quả có thể đoán trước được.
Meredith L. Patterson

Câu trả lời:


109

Đảm bảo rằng bạn đang đặt chuỗi truy vấn của mình ở cuối URL khi thực hiện yêu cầu GET.

$ qry_str = "? x = 10 & y = 20";
$ ch = curl_init ();

// Đặt dữ liệu truy vấn tại đây với URL
curl_setopt ($ ch, CURLOPT_URL, 'http://example.com/test.php'. $ qry_str); 

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_TIMEOUT, 3);
$ content = trim (curl_exec ($ ch));
curl_close ($ ch);
in nội dung $;
Với POST, bạn chuyển dữ liệu qua tùy chọn CURLOPT_POSTFIELDS để thay thế 
chuyển nó trong CURLOPT__URL.
-------------------------------------------------- -----------------------

$ qry_str = "x = 10 & y = 20";
curl_setopt ($ ch, CURLOPT_URL, 'http://example.com/test.php');  
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_TIMEOUT, 3);

// Đặt phương thức yêu cầu thành POST
curl_setopt ($ ch, CURLOPT_POST, 1);

// Đặt dữ liệu truy vấn tại đây với CURLOPT_POSTFIELDS
curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ qry_str);

$ content = trim (curl_exec ($ ch));
curl_close ($ ch);
in nội dung $;

Lưu ý từ curl_setopt()tài liệu cho CURLOPT_HTTPGET(nhấn mạnh được thêm vào):

[Đặt CURLOPT_HTTPGET bằng] TRUEđể đặt lại phương thức yêu cầu HTTP thành GET.
Vì GET là mặc định, điều này chỉ cần thiết nếu phương thức yêu cầu đã được thay đổi.


3
Đó là một cách khá ác để đặt thời gian chờ là 51 giây!
Jack Goossen

Bắt thật tốt @JackGoossen!
RC.

55

Thêm điều này trước khi gọi curl_exec ($ curl_handle)

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');

39

Đã giải quyết: Vấn đề nằm ở đây:

Tôi đặt POSTqua cả hai _CUSTOMREQUEST_POST_CUSTOMREQUESTvẫn tồn tại POSTkhi _POSTchuyển sang _HTTPGET. Máy chủ giả định tiêu đề từ _CUSTOMREQUESTlà đúng và quay trở lại với 411.

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');

3

Yêu cầu CURL theo mặc định là GET, bạn không phải đặt bất kỳ tùy chọn nào để thực hiện yêu cầu GET CURL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.