PHP curl_exec停止执行脚本的其余部分,而不会出现错误日志

时间:2019-12-19 21:52:41

标签: php php-curl

我有一个运行着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();

1 个答案:

答案 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 );