PHP通过CURL POST发送JSON

问题描述:

I cannot figure out why this function is not POSTing, any ideas? Thanks! I am trying to send JSON data to a server, and I am getting no error or feedback, the var_dump($response) just gives me 'null'.

function postToDatabase($data, $thingName){
  $content = json_encode($data);

  $curl = curl_init('http://someurl.com/thing'. $thingName .'/otherthing');
  curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($curl, CURLOPT_HEADER, false);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_HTTPHEADER,
    array("Content-type: application/json"));
  curl_setopt($curl, CURLOPT_POST, true);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //curl error SSL certificate problem, verify that the CA cert is OK

$result     = curl_exec($curl);
$response   = json_decode($result);
var_dump($response);
curl_close($curl);
}


/* post to url */
postToDatabase($someData, $thingName);

my JSON $content:

{
    "email": null,
    "stripeToken": "aidfat9s8d7ftas7df9asjd7fy0aksd",
    "stripeShippingName": "A Test User",
    "stripeShippingAddressLine1": "1we2e12",
    "stripeShippingAddressZip": "62650",
    "stripeShippingAddressState": "IL",
    "stripeShippingAddressCity": "Jacksonville",
    "stripeShippingAddressCountry": "United States",
    "products": [
        {
            "productId": "897349864",
            "sizeId": "4",
            "colorId": "6",
            "units": 1
        }
    ]
}

我无法弄清楚为什么这个函数不是POST,有什么想法吗? 谢谢! 我正在尝试将JSON数据发送到服务器,我没有收到任何错误或反馈,var_dump($ response)只给我'null'。 p>

   function postToDatabase($ data,$ thingName){
 $ content = json_encode($ data); 
 
 $ curl = curl_init('http://someurl.com/thing'。$ thingName。'/ otherthing')  ; 
 curl_setopt($ curl,CURLOPT_CUSTOMREQUEST,“POST”); 
 curl_setopt($ curl,CURLOPT_HEADER,false); 
 curl_setopt($ curl,CURLOPT_RETURNTRANSFER,true); 
 curl_setopt($ curl,CURLOPT_HTTPHEADER,
  array(“Content-type:application / json”)); 
 curl_setopt($ curl,CURLOPT_POST,true); 
 curl_setopt($ curl,CURLOPT_POSTFIELDS,$ content); 
curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);  //卷曲错误SSL证书问题,验证CA证书是否正常
 
 $ result = curl_exec($ curl); 
 $ response = json_decode($ result); 
var_dump($ response); 
curl_close($  curl); 
} 
 
 
 / *发布到url * / 
postToDatabase($ someData,$ thingName); 
  code>  pre> 
 
 

我的JSON $内容 : p>

  {
“email”:null,
“”stripeToken“:”aidfat9s8d7ftas7df9asjd7fy0aksd“,
”stripeShippingName“:”测试用户“,
”stripeShippingAddressLine1  “:”1we2e12“,
”stripeShippingAddressZip“:”62650“,
”stripeShippingAddressState“:”IL“,
”stripeShippingAddressCity“:”Jacksonville“,
”stripeShippingAddressCountry“:”United States“,
” 产品“:[
 {
”“productId”:“897349864”,
“sizeId”:“4”,
“colorId”:“6”,
“单位”:1 
} 
]  
} 
  code>  pre> 
  div>

your issue could be because of error happening in curl or while decoding json string using json_decode() I would recommend you to consider implementing more error handling, using related error functions, something like:

$result     = curl_exec($curl);
if($result == false){
     var_dump(curl_error($curl)); // http://se2.php.net/manual/en/function.curl-error.php
}
$response   = json_decode($result);
if ($resonse == null){
    var_dump(json_last_error());
}
var_dump($response);
curl_close($curl);

Here is the CURL error's list : http://se2.php.net/manual/en/function.curl-errno.php

<?php
$error_codes=array(
[1] => 'CURLE_UNSUPPORTED_PROTOCOL', 
[2] => 'CURLE_FAILED_INIT', 
[3] => 'CURLE_URL_MALFORMAT', 
[4] => 'CURLE_URL_MALFORMAT_USER', 
[5] => 'CURLE_COULDNT_RESOLVE_PROXY', 
[6] => 'CURLE_COULDNT_RESOLVE_HOST', 
[7] => 'CURLE_COULDNT_CONNECT', 
[8] => 'CURLE_FTP_WEIRD_SERVER_REPLY',
[9] => 'CURLE_REMOTE_ACCESS_DENIED',
[11] => 'CURLE_FTP_WEIRD_PASS_REPLY',
[13] => 'CURLE_FTP_WEIRD_PASV_REPLY',
[14]=>'CURLE_FTP_WEIRD_227_FORMAT',
[15] => 'CURLE_FTP_CANT_GET_HOST',
[17] => 'CURLE_FTP_COULDNT_SET_TYPE',
[18] => 'CURLE_PARTIAL_FILE',
[19] => 'CURLE_FTP_COULDNT_RETR_FILE',
[21] => 'CURLE_QUOTE_ERROR',
[22] => 'CURLE_HTTP_RETURNED_ERROR',
[23] => 'CURLE_WRITE_ERROR',
[25] => 'CURLE_UPLOAD_FAILED',
[26] => 'CURLE_READ_ERROR',
[27] => 'CURLE_OUT_OF_MEMORY',
[28] => 'CURLE_OPERATION_TIMEDOUT',
[30] => 'CURLE_FTP_PORT_FAILED',
[31] => 'CURLE_FTP_COULDNT_USE_REST',
[33] => 'CURLE_RANGE_ERROR',
[34] => 'CURLE_HTTP_POST_ERROR',
[35] => 'CURLE_SSL_CONNECT_ERROR',
[36] => 'CURLE_BAD_DOWNLOAD_RESUME',
[37] => 'CURLE_FILE_COULDNT_READ_FILE',
[38] => 'CURLE_LDAP_CANNOT_BIND',
[39] => 'CURLE_LDAP_SEARCH_FAILED',
[41] => 'CURLE_FUNCTION_NOT_FOUND',
[42] => 'CURLE_ABORTED_BY_CALLBACK',
[43] => 'CURLE_BAD_FUNCTION_ARGUMENT',
[45] => 'CURLE_INTERFACE_FAILED',
[47] => 'CURLE_TOO_MANY_REDIRECTS',
[48] => 'CURLE_UNKNOWN_TELNET_OPTION',
[49] => 'CURLE_TELNET_OPTION_SYNTAX',
[51] => 'CURLE_PEER_FAILED_VERIFICATION',
[52] => 'CURLE_GOT_NOTHING',
[53] => 'CURLE_SSL_ENGINE_NOTFOUND',
[54] => 'CURLE_SSL_ENGINE_SETFAILED',
[55] => 'CURLE_SEND_ERROR',
[56] => 'CURLE_RECV_ERROR',
[58] => 'CURLE_SSL_CERTPROBLEM',
[59] => 'CURLE_SSL_CIPHER',
[60] => 'CURLE_SSL_CACERT',
[61] => 'CURLE_BAD_CONTENT_ENCODING',
[62] => 'CURLE_LDAP_INVALID_URL',
[63] => 'CURLE_FILESIZE_EXCEEDED',
[64] => 'CURLE_USE_SSL_FAILED',
[65] => 'CURLE_SEND_FAIL_REWIND',
[66] => 'CURLE_SSL_ENGINE_INITFAILED',
[67] => 'CURLE_LOGIN_DENIED',
[68] => 'CURLE_TFTP_NOTFOUND',
[69] => 'CURLE_TFTP_PERM',
[70] => 'CURLE_REMOTE_DISK_FULL',
[71] => 'CURLE_TFTP_ILLEGAL',
[72] => 'CURLE_TFTP_UNKNOWNID',
[73] => 'CURLE_REMOTE_FILE_EXISTS',
[74] => 'CURLE_TFTP_NOSUCHUSER',
[75] => 'CURLE_CONV_FAILED',
[76] => 'CURLE_CONV_REQD',
[77] => 'CURLE_SSL_CACERT_BADFILE',
[78] => 'CURLE_REMOTE_FILE_NOT_FOUND',
[79] => 'CURLE_SSH',
[80] => 'CURLE_SSL_SHUTDOWN_FAILED',
[81] => 'CURLE_AGAIN',
[82] => 'CURLE_SSL_CRL_BADFILE',
[83] => 'CURLE_SSL_ISSUER_ERROR',
[84] => 'CURLE_FTP_PRET_FAILED',
[84] => 'CURLE_FTP_PRET_FAILED',
[85] => 'CURLE_RTSP_CSEQ_ERROR',
[86] => 'CURLE_RTSP_SESSION_ERROR',
[87] => 'CURLE_FTP_BAD_FILE_LIST',
[88] => 'CURLE_CHUNK_FAILED');

?>

If you are getting something in $result, but not in $response, could it be your JSON is malformed? Try using: http://www.php.net/manual/en/function.json-last-error.php

or you could use http://jsonlint.org/ to check the raw $result;