복붙노트

CURLOPT_POSTFIELDS에 대한 말풍선 POST 형식

PHP

CURLOPT_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. ==============================

    1.문자열을 보내려는 경우 urlencode ()를 사용하십시오. 그렇지 않으면 배열의 경우 key => value 쌍이어야하며 Content-type 헤더는 multipart / form-data로 자동 설정됩니다.

    문자열을 보내려는 경우 urlencode ()를 사용하십시오. 그렇지 않으면 배열의 경우 key => value 쌍이어야하며 Content-type 헤더는 multipart / form-data로 자동 설정됩니다.

    또한 배열에 대한 쿼리를 작성하기 위해 추가 함수를 작성할 필요가 없습니다.

    $query = http_build_query($data, '', '&');
    
  2. ==============================

    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. ==============================

    3.배열을 전달하여 php / curl이 인코딩 등의 더러운 작업을하도록 할 수 있습니다.

    배열을 전달하여 php / curl이 인코딩 등의 더러운 작업을하도록 할 수 있습니다.

  4. ==============================

    4.PHP 매뉴얼에 따르면 cURL에 문자열로 전달 된 데이터는 URL 인코딩되어야합니다. curl_setopt () 페이지를보고 CURLOPT_POSTFIELDS를 검색하십시오.

    PHP 매뉴얼에 따르면 cURL에 문자열로 전달 된 데이터는 URL 인코딩되어야합니다. curl_setopt () 페이지를보고 CURLOPT_POSTFIELDS를 검색하십시오.

  5. ==============================

    5.중첩 된 배열의 경우 다음을 사용할 수 있습니다.

    중첩 된 배열의 경우 다음을 사용할 수 있습니다.

    $data = [
      'name[0]' = 'value 1',
      'name[1]' = 'value 2',
      'name[2]' = 'value 3',
      'id' = 'value 4',
      ....
    ];
    
  6. ==============================

    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. ==============================

    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. ==============================

    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);
    
  9. from https://stackoverflow.com/questions/5224790/curl-post-format-for-curlopt-postfields by cc-by-sa and MIT license