CURLOPT_POSTFILDS의 컬 POST 형식
사용할 때curl경유로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);
문자열을 송신하는 경우는, 그것을 urlencode()로 합니다.그렇지 않은 경우 어레이의 경우 키=>값 쌍과Content-typeheader는 자동으로 설정됩니다.multipart/form-data.
또한 어레이 쿼리를 작성하기 위해 추가 함수를 작성할 필요가 없습니다.이미 다음과 같은 기능이 준비되어 있습니다.
$query = http_build_query($data, '', '&');
편집: php5 이상에서는 다음을 사용하는 것이 좋습니다.
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 이전:
매뉴얼:
CURLOPT_POST 필드
HTTP "POST" 작업에서 게시하는 전체 데이터.파일을 투고하려면 파일 이름 앞에 @ 를 붙이고 풀 경로를 사용합니다.파일 형식은 파일 이름 뒤에 ';type=syslogtype' 형식을 지정하여 명시적으로 지정할 수 있습니다.이 파라미터는 urlencoded string('1=val1&val2=val2&...' 등)으로 전달하거나 필드명을 키로, 필드 데이터를 값으로 하는 배열로 전달할 수 있습니다. 값이 배열인 경우 Content-Type 헤더는 multipart/form-data로 설정됩니다.PHP 5.2.0에서는 이 옵션에 @ 프리픽스로 전달된 파일이 동작하기 위해서는 어레이 형식이어야 합니다.
따라서 다음과 같은 기능이 완벽하게 작동해야 합니다(관련 배열로 전달된 매개 변수).
function preparePostFields($array) {
$params = array();
foreach ($array as $key => $value) {
$params[] = $key . '=' . urlencode($value);
}
return implode('&', $params);
}
끈을 전혀 건네지 마세요!
배열을 전달하고 php/curl이 인코딩 등의 더러운 작업을 수행하도록 할 수 있습니다.
에 따라 다릅니다.content-type
url-multipart/form-data 중 하나
브라우저가 폼에서와 같이 표준적인 방법으로 데이터를 전송하려면 관련 어레이를 전달하기만 하면 됩니다.PHP 매뉴얼에 기재된 바와 같이:
이 파라미터는 urlencoded string('1=val1&val2=val2&...' 등)으로 전달하거나 필드명을 키로, 필드 데이터를 값으로 하는 배열로 전달할 수 있습니다.값이 배열인 경우 Content-Type 헤더는 multipart/form-data로 설정됩니다.
JSON 부호화
단, JSON API와 통신할 때는 POST 데이터를 API가 이해할 수 있도록 콘텐츠를 JSON 인코딩해야 합니다.
이 경우 콘텐츠는 JSON으로 명확하게 부호화되어야 합니다.
CURLOPT_POSTFIELDS => json_encode(['param1' => $param1, 'param2' => $param2]),
JSON에서 통신할 때는 보통 다음과 같이 설정합니다.accept ★★★★★★★★★★★★★★★★★」content-type헤더를 지정합니다.
CURLOPT_HTTPHEADER => [
'accept: application/json',
'content-type: application/json'
]
★★★의 CURLOPT_POSTFIELDS urlencoded urlencoded urlencoded urlencoded urlencoded urlencoded 등의 urlencoded 할 수 para1=val1¶2=val2&..로 하고 할 수도 있습니다.
다음 형식을 사용해 보십시오.
$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);
되지 않은 또의 큰 은 '다르다'라는 이다.CURLOPT_POSTFIELDS을 사용법
를 사용했을 ['a' => 1, 'b' => [2, 3, 4]] 이거는 '으로 하다'로 해야 요.a=1&b[]=2&b[]=3&b[]=4(the)[ ★★★★★★★★★★★★★★★★★」]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":
PHP 알림:배열에서 문자열로 변환...온라인으로...
PHP 매뉴얼에 따르면 문자열로 cURL에 전달되는 데이터는 URL 인코딩되어야 합니다.curl_setopt() 페이지를 참조하여CURLOPT_POSTFIELDS.
우리는 CMS Effcore에 대한 테스트를 작성할 때 같은 솔루션을 찾고 있었습니다.이 솔루션은 매우 간단한 것으로 판명되었으며, 다음과 같습니다.
$data = [
'name[0]' => 'value 1',
'name[1]' => 'value 2',
'name[2]' => 'value 3',
'id' => 'value 4'
];
$data = array(
'name[0]' => 'value 1',
'name[1]' => 'value 2',
'name[2]' => 'value 3',
'id' => 'value 4'
);
흥미롭게도 Postman이 POST를 수행하는 방법은 다음 2가지 추가 옵션을 포함한 완전한 GET 작업입니다.
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
다른 방법일 뿐이고, 아주 잘 작동합니다.
나도 이 답을 찾는 데 시간이 오래 걸렸다.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);
언급URL : https://stackoverflow.com/questions/5224790/curl-post-format-for-curlopt-postfields
'source' 카테고리의 다른 글
| MySQL 클러스터 또는 MariaDB Galera (0) | 2023.01.05 |
|---|---|
| C 또는 C++의 작은따옴표 대 큰따옴표 (0) | 2023.01.05 |
| MySQL은 NULL 값을 인덱싱합니까? (0) | 2023.01.05 |
| Flask 요청으로 받은 데이터 가져오기 (0) | 2023.01.05 |
| console.log(result)는 [Object]를 반환합니다.result.name에 접속하려면 어떻게 해야 하나요? (0) | 2023.01.05 |