CURLOPT_POSTFIELDS에 대한 말풍선 POST 형식
PHPCURLOPT_POSTFIELDS에 대한 말풍선 POST 형식
POST를 통해 컬을 사용하고 CURLOPT_POSTFIELD를 설정할 때 urlencode 또는 특수 형식을 사용해야합니까?
예를 들면 : 2 개의 필드를 게시하려면 첫 번째 및 마지막 :
first=John&last=Smith
곱슬 곱슬과 함께 사용해야하는 정확한 코드 / 형식은 무엇입니까?
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$reply=curl_exec($ch);
curl_close($ch);
해결법
-
==============================
1.문자열을 보내려는 경우 urlencode ()를 사용하십시오. 그렇지 않으면 배열의 경우 key => value 쌍이어야하며 Content-type 헤더는 multipart / form-data로 자동 설정됩니다.
문자열을 보내려는 경우 urlencode ()를 사용하십시오. 그렇지 않으면 배열의 경우 key => value 쌍이어야하며 Content-type 헤더는 multipart / form-data로 자동 설정됩니다.
또한 배열에 대한 쿼리를 작성하기 위해 추가 함수를 작성할 필요가 없습니다.
$query = http_build_query($data, '', '&');
-
==============================
2.편집 : php5에서 위쪽으로, http_build_query의 사용을 권장합니다 :
편집 : php5에서 위쪽으로, http_build_query의 사용을 권장합니다 :
string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
설명서의 간단한 예 :
<?php $data = array('foo'=>'bar', 'baz'=>'boom', 'cow'=>'milk', 'php'=>'hypertext processor'); echo http_build_query($data) . "\n"; /* output: foo=bar&baz=boom&cow=milk&php=hypertext+processor */ ?>
php5 이전 :
매뉴얼에서 :
이렇게 뭔가가 완벽하게 작동해야합니다 (매개 변수가 연관 배열에 전달 된 경우).
function preparePostFields($array) { $params = array(); foreach ($array as $key => $value) { $params[] = $key . '=' . urlencode($value); } return implode('&', $params); }
-
==============================
3.배열을 전달하여 php / curl이 인코딩 등의 더러운 작업을하도록 할 수 있습니다.
배열을 전달하여 php / curl이 인코딩 등의 더러운 작업을하도록 할 수 있습니다.
-
==============================
4.PHP 매뉴얼에 따르면 cURL에 문자열로 전달 된 데이터는 URL 인코딩되어야합니다. curl_setopt () 페이지를보고 CURLOPT_POSTFIELDS를 검색하십시오.
PHP 매뉴얼에 따르면 cURL에 문자열로 전달 된 데이터는 URL 인코딩되어야합니다. curl_setopt () 페이지를보고 CURLOPT_POSTFIELDS를 검색하십시오.
-
==============================
5.중첩 된 배열의 경우 다음을 사용할 수 있습니다.
중첩 된 배열의 경우 다음을 사용할 수 있습니다.
$data = [ 'name[0]' = 'value 1', 'name[1]' = 'value 2', 'name[2]' = 'value 3', 'id' = 'value 4', .... ];
-
==============================
6.CURLOPT_POSTFIELDS의 경우 매개 변수는 para1 = val1 & para2 = val2 & ..와 같이 urlencoded 문자열로 전달되거나 필드 이름이 키이고 값이 필드 데이터 인 배열로 전달 될 수 있습니다
CURLOPT_POSTFIELDS의 경우 매개 변수는 para1 = val1 & para2 = val2 & ..와 같이 urlencoded 문자열로 전달되거나 필드 이름이 키이고 값이 필드 데이터 인 배열로 전달 될 수 있습니다
다음 형식을 시도해보십시오.
$data = json_encode(array( "first" => "John", "last" => "Smith" )); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $output = curl_exec($ch); curl_close($ch);
-
==============================
7.아직 언급되지 않은 또 다른 주요 차이점은 CURLOPT_POSTFIELDS가 중첩 배열을 처리 할 수 없다는 것입니다.
아직 언급되지 않은 또 다른 주요 차이점은 CURLOPT_POSTFIELDS가 중첩 배열을 처리 할 수 없다는 것입니다.
중첩 배열 [ 'a'=> 1, 'b'=> [2, 3, 4]를 취하면 a = 1 & b [] = 2 & b [] = 3 & b [] = 4 [및]은 URL 인코딩 됨 /해야 함). 이것은 다른 쪽 끝의 중첩 된 배열로 자동으로 다시 변환됩니다 (다른 쪽 끝은 PHP라고 가정).
이것은 작동 할 것이다 :
var_dump(http_build_query(['a' => 1, 'b' => [2, 3, 4]])); // output: string(36) "a=1&b%5B0%5D=2&b%5B1%5D=3&b%5B2%5D=4"
작동하지 않습니다.
curl_setopt($ch, CURLOPT_POSTFIELDS, ['a' => 1, 'b' => [2, 3, 4]]);
이것은 당신에게 통지를 줄 것입니다. 코드 실행이 계속되고 끝 점이 매개 변수 b를 "Array"문자열로받습니다.
-
==============================
8.이 대답은 저를 찾아내는 데 영원히 필요했습니다. URL을 인코딩 한 쿼리 문자열로 URL (파일 이름과 확장명 뒤에 '?')을 연결하면됩니다. POST cURL 옵션을 설정해야하는 것처럼 보이지 않습니다. 아래 가짜 예제를 참조하십시오.
이 대답은 저를 찾아내는 데 영원히 필요했습니다. URL을 인코딩 한 쿼리 문자열로 URL (파일 이름과 확장명 뒤에 '?')을 연결하면됩니다. POST cURL 옵션을 설정해야하는 것처럼 보이지 않습니다. 아래 가짜 예제를 참조하십시오.
//create URL $exampleURL = 'http://www.example.com/example.php?'; // create curl resource $ch = curl_init(); // build URL-encoded query string $data = http_build_query( array('first' => 'John', 'last' => 'Smith', '&'); // set url curl_setopt($ch, CURLOPT_URL, $exampleURL . $data); // return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources <br/> curl_close($ch);
file_get_contents ()를 사용할 수도 있습니다 :
// read entire webpage file into a string $output = file_get_contents($exampleURL . $data);
from https://stackoverflow.com/questions/5224790/curl-post-format-for-curlopt-postfields by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
addslashes ()를 통한 SQL 삽입 예제? (0) | 2018.09.15 |
---|---|
onClick으로 PHP 기능 실행 (0) | 2018.09.15 |
`$ HTTP_RAW_POST_DATA`에 대한 경고 (0) | 2018.09.15 |
PHP에서 csrf 방지 (0) | 2018.09.15 |
PHP를 사용하여 오디오 스트림에서 트랙 정보 가져 오기 (0) | 2018.09.15 |