我有一个运行着curl和报告设置的php脚本,但是它停止了使用curl_exec()
方法的执行,并且没有抛出错误:
$fields = array(
'auth' => array(
'cId' => 'DEADBEEF-8675309-8675309-123123-4321',
'sig' => 'Not really a signature',
'data' => array(
'field' => 'pat',
'value' => '12',
'id1' => 'lasagna',
'id2' => 'peperoni'
)
),
'item1' => 'QPFMgH1TnCTLrylGeNs8yzYVVXxUgR0RHwj9jNwgXJJEfxODdoOKDOJLv66CSU5XKRfu4KYtDJB5rAmngxNrRDFpWU69oHMTlZoHAewuy3ft',
'item2' => 'gMiGdw==',
'tokenList' => array(
"token", "list"
)
);
$postfields = json_encode($fields);
error_reporting(E_ALL);
ini_set('display_errors', true);
$curl = curl_init('http://localhost:8080/endpoint');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//$result = curl_exec($curl);
echo "before curl_exec" . "\n\n";
$response = json_decode(curl_exec($curl));
echo "after curl_exec" . "\n\n";
print_r($response);
编辑:忘记为$ fields变量包含json_encode行,以传递给curl_setopt();
答案 0 :(得分:0)
您的代码有两个问题:
您将“发布”数据放入l1 = [1,2,3,4,5,6,7,8,9]
l2 = [2,3,4,2,3,4,2,3,4]
l3 = [3,2,4,3,2,4,3,2,4]
l4 = [4,5,6,4,5,6,4,5,6]
l5 = [7,8,9,7,8,9,7,8,9]
,但随后...
$fields
...您正在传递curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
来卷曲。
假设这是一个错字,用
修复$postFields
不起作用。
如果用于curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
的参数是一个数组,则它必须是一个关联数组,其中键和值是字符串(或可以强制转换/转换为字符串的值。
在您的情况下,CURLOPT_POSTFIELDS
是一个数组,其中某些值是数组。那将行不通(并发出警告“将数组转换为字符串”)。
您设置了一个标头,该标头指定与请求一起发送的数据为JSON格式
$fields
如果您想通过curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
请求以 JSON 的形式将数据发送到$fields
,则可以这样操作:
POST
如果仍然需要解决某些问题,请逐步进行调试以找出问题所在:
$fields = array( /* ... */ );
$json_fields = json_encode( $fields );
$curl = curl_init( 'http://localhost:8080/endpoint' );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $json_fields );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json',
'Content-Length: ' . strlen($json_fields) ] );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
$response = curl_exec( $curl );
$response_data = json_decode( $response );