일반적인 상황에서 CURL을 사용하여 POST 데이터를 제출할 때 다음과 같이 작성하는 데 익숙합니다.
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
그러나 이 작성 방법은 때로는 그다지 유용하지 않습니다. 어쩌면 500을 얻을 수도 있습니다. 서버에서 오류가 반환되었습니다. 그러나 소켓을 사용하여 서버에 데이터를 제출하려고 하면 매우 정확한 결과를 얻을 수 있습니다.
예를 들어 서버에 다음 PHP 파일이 있습니다.
<?php print_r($_SERVER);?>
CURL을 사용하여 세부 사항에 주의를 기울이지 않고 일부 데이터를 서버에 보내는 경우 다음과 같은 결과를 얻을 수 있습니다. 이상적인 결과는 아닙니다.
[CONTENT_TYPE] => multipart/form-data; boundary=—————————-f924413ea122
그러나 $post_data 대신 http_build_query($post_data)를 사용한 다음 이 PHP 스크립트에 데이터를 제출하면 위와는 다른 결과를 얻게 됩니다. 이것이 이상적인 결과입니다. :
[CONTENT_TYPE] => application/x-www-form-urlencoded
위의 예에서 CURL을 사용하고 매개변수가 데이터인 경우 서버에 데이터를 제출할 때 HTTP 헤더가 Content_type: application/ x-www-를 전송한다는 것을 어렵지 않게 알 수 있습니다. 양식-urlencoded. 이는 일반 웹페이지ff9c23ada1bcecdd1a0fb5d5a0f18437에 양식을 제출할 때 브라우저에서 보내는 헤더입니다. 그리고 multipart/form-data는 이것이 파일을 업로드하는 데 사용되는 형식이라는 것을 알고 있습니다. 경계 구분 기호를 포함하면 많은 바이트가 추가됩니다.
공식 매뉴얼에는 다음과 같이 나와 있습니다.
The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like ‘para1=val1¶2=val2&…' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
배열을 사용하여 게시 데이터를 제공하는 경우 CURL 구성 요소는 파일 업로드를 위한 @filename 작성 방법과 호환될 수 있습니다. 기본적으로 content_type입니다. multipart/form-data로 설정되어 있습니다. 대부분의 서버에는 영향을 미치지 않지만 여전히 호환되지 않는 소수의 서버가 있습니다.
일부 요약 후 마침내 결론에 도달했습니다. 파일을 업로드할 필요가 없으면 게시물에서 제출한 데이터에 대해 http_build_query 처리를 수행한 다음 전송해 보세요. 이렇게 하면 더 나은 호환성과 더 작은 요청을 얻을 수 있습니다. 데이터 패킷.
PHP에서 CURL의 CURLOPT_POSTFIELDS 매개변수 사용에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!