PHP 在 foreach 循环中卷曲 POST - returns 403
PHP CURL POST in foreach loop - returns 403
我在使用 curl 时遇到了一些问题。
我有一个 foreachloop,我在最后用 curl 做了一个简单的 postrequest。
但我总是得到 403 回复。
但是当我尝试使用定义的数组但没有 foreach 的相同代码时它的工作。
我希望有人对此有想法。
测试数组
$test = array (
'name' => 'Peter Apimann',
'email' => 'a@a.de',
'website' => 'www.a.de',
'phonenumber' => '123456789',
'company' => 'Apimann Gmbh',
'address' => 'Straße 1',
'city' => 'Neu-Isengard',
'zip' => '12345',
'state' => 'Mordor',
'description' => 'We are a fictional Company',
'isCompetitor' => false,
'source' => '11',
'status' => '16',
'custom_fields[leads][11]' => "<a target='_blank' href='https://google.de'>visit link</a>"
);
//var_dump($test);
$url = "https://example.com/api/endpoint";
$requestHeader[] = "authtoken: 123456789";
$fields_string = http_build_query($test);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$requestHeader);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
在我的 foreach 循环中
<?php
foreach( $postdata AS $item ) {
...
$url = "https://example.com/api/endpoint";
$requestHeader[] = "authtoken: 123456789";
$fields_string = http_build_query($item);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$requestHeader);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
}
好的,我知道了。
我确定这不是最好的解决方案,但它确实有效。 :)
首先,我将每个项目放入自己的数组中,而不是直接执行 post。
foreach( $postdata AS $item ) {
...
$itemsToSend[] = $item;
}
然后我创建了一个简单的函数
function postTheItems ($postarray) {
$url = "https://example.com/api/endpoint";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$requestHeader= array(
"authtoken: 123456789",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $requestHeader);
$postarray= http_build_query($postarray);
$data = <<<DATA
$postarray
DATA;
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
最后我创建了另一个 foreach 并调用函数
foreach ( $final_post_data AS $item ) {
postTheItems ($itemsToSend);
}
我在使用 curl 时遇到了一些问题。 我有一个 foreachloop,我在最后用 curl 做了一个简单的 postrequest。 但我总是得到 403 回复。
但是当我尝试使用定义的数组但没有 foreach 的相同代码时它的工作。
我希望有人对此有想法。
测试数组
$test = array (
'name' => 'Peter Apimann',
'email' => 'a@a.de',
'website' => 'www.a.de',
'phonenumber' => '123456789',
'company' => 'Apimann Gmbh',
'address' => 'Straße 1',
'city' => 'Neu-Isengard',
'zip' => '12345',
'state' => 'Mordor',
'description' => 'We are a fictional Company',
'isCompetitor' => false,
'source' => '11',
'status' => '16',
'custom_fields[leads][11]' => "<a target='_blank' href='https://google.de'>visit link</a>"
);
//var_dump($test);
$url = "https://example.com/api/endpoint";
$requestHeader[] = "authtoken: 123456789";
$fields_string = http_build_query($test);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$requestHeader);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
在我的 foreach 循环中
<?php
foreach( $postdata AS $item ) {
...
$url = "https://example.com/api/endpoint";
$requestHeader[] = "authtoken: 123456789";
$fields_string = http_build_query($item);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$requestHeader);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
}
好的,我知道了。 我确定这不是最好的解决方案,但它确实有效。 :)
首先,我将每个项目放入自己的数组中,而不是直接执行 post。
foreach( $postdata AS $item ) {
...
$itemsToSend[] = $item;
}
然后我创建了一个简单的函数
function postTheItems ($postarray) {
$url = "https://example.com/api/endpoint";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$requestHeader= array(
"authtoken: 123456789",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $requestHeader);
$postarray= http_build_query($postarray);
$data = <<<DATA
$postarray
DATA;
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
最后我创建了另一个 foreach 并调用函数
foreach ( $final_post_data AS $item ) {
postTheItems ($itemsToSend);
}