PHP CURL에서 POST에서 GET으로 전환하는 방법


83

이전 Post 요청에서 Get 요청으로 전환 해 보았습니다. Get이라고 가정하지만 결국 게시물을 작성합니다.

PHP에서 다음을 시도했습니다.

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

내가 무엇을 놓치고 있습니까?

추가 정보 : POST 요청을 수행하도록 설정된 연결이 이미 있습니다. 성공적으로 완료되었지만 나중에 연결을 다시 사용하고 위의 setopts를 사용하여 GET으로 다시 전환하려고하면 여전히 불완전한 POST 헤더로 내부적으로 POST를 수행하게됩니다. 문제는 GET을 수행한다고 믿지만 콘텐츠 길이 매개 변수없이 POST 헤더를 넣고 411 오류로 연결이 실패한다는 것입니다.


3
Get 요청에주의하십시오. Google은 그들과 함께 즐겁습니다. ;)
NotMe

10
@Chris-친구는 GET 요청을 통해 사용자가 제공 한 콘텐츠를 관리하는 사이트를 구축 할 때 어려움을 겪었습니다. Googlebot은 예측 가능한 결과와 함께 모든 '삭제'링크를 기꺼이 따라갔습니다.
Meredith L. Patterson

답변:


109

GET 요청을 수행 할 때 URL 끝에 쿼리 ​​문자열을 넣어야합니다.

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

// 여기에 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);
$ content 인쇄;
POST를 사용하면 대신 CURLOPT_POSTFIELDS 옵션을 통해 데이터를 전달합니다. 
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);

// 요청 방법을 POST로 설정
curl_setopt ($ ch, CURLOPT_POST, 1);

// 여기에서 CURLOPT_POSTFIELDS를 사용하여 쿼리 데이터를 설정합니다.
curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ qry_str);

$ content = trim (curl_exec ($ ch));
curl_close ($ ch);
$ content 인쇄;

로부터 참고 curl_setopt()문서 에 대한 CURLOPT_HTTPGET(강조 추가)

HTTP 요청 방법을 GET TRUE으로 재설정 하려면 [CURLOPT_HTTPGET을 다음과 같게 설정] 합니다 .
GET이 기본값이므로 요청 방법이 변경된 경우에만 필요합니다.


3
51 초의 시간 제한을 설정하는 것은 매우 사악한 방법입니다!
Jack Goossen

좋은 캐치 @JackGoossen!
RC.

55

curl_exec ($ curl_handle)을 호출하기 전에 이것을 추가하십시오.

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

39

해결됨 : 문제는 여기에 있습니다.

로 전환하는 동안 및 및 지속성을 POST통해 설정 했습니다 . 서버는 헤더 가 올바른 것으로 가정하고 411로 돌아 왔습니다._CUSTOMREQUEST_POST_CUSTOMREQUESTPOST_POST_HTTPGET_CUSTOMREQUEST

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.