PHP - curl_multi выдает запрос 400 Bad - PullRequest
       34

PHP - curl_multi выдает запрос 400 Bad

0 голосов
/ 22 октября 2018

С моим кодом я получаю данные с сайта.Я хочу перенести эти данные в поля базы данных через REST-API.Это должно работать с cURL (PUT).Поэтому мне нужно выполнить несколько сценариев cURL в моем скрипте, чтобы заполнить разные поля базы данныхДля этого я использовал пример кода с php.net (http://php.net/manual/de/function.curl-multi-init.php). К сожалению, я получаю только «400 Плохой запрос - Ваш браузер отправил неверный запрос». Что я делаю не так?

Кодя получаю данные

header('Content-type: text/html; charset=utf-8');
$User_Agent = 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

$url = "http://hub.culturegraph.org/entityfacts/118540238";
$url2 = "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156190";
$url3 = "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156191";

$request_headers[] = 'Accept: application/json';
$request_headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$request_headers[] = 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3';
$request_headers[] = 'Content-Type: application/json; charset=utf-8';
$request_headers[] = 'Accept-Encoding:  gzip, deflate, identity';
$request_headers[] = 'Accept-Language: de,en-US;q=0.7,en;q=0.3';
$request_headers[] = 'X-picturemaxx-api-key: key';
$request_headers[] = "Authorization: Bearer token";
$request_headers[] = 'Expect: ';

// build the individual requests, but do not execute them
$ch = curl_init($url);
//  Initiate curl
curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, "");

$result = curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
curl_close($ch);
// Closing

$data = json_decode($result, true);

С помощью следующего кода определяются данные для передачи, вставляются в форму для передачи и json_encode.

$alternativData = array();
foreach($data['variantName'] as $alternativ) {
//echo $alternativ . " ; ";
$alternativData[] = $alternativ;
}


$dataj = array (
'classification_element_parent_id' => 0,
'classification_element_matchcode' => '',
'classification_element_foreignref' => '',
'localized' => 
array (
'en-us' => 
array (
'classification_element_name' => '',
),
'de-de' => 
array (
'classification_element_name' => substr(implode(' ; ', $alternativData),0 ,10000),
),
),
);
$data_json = json_encode($dataj);
$request_headers[] = 'Content-Length: ' . strlen($data_json);


$dataj2 = array (
'classification_element_parent_id' => 2156190,
'classification_element_matchcode' => '',
'localized' => 
array (
'en-us' => 
array (
'classification_element_name' => '',
),
'de-de' => 
array (
'classification_element_name' => $data['dateOfBirth'],
),
),
);

$data_json2 = json_encode($dataj2);
$request_headers[] = 'Content-Length: ' . strlen($data_json2);

Затем следует curl_multi_init, который приводитна запрос 400 Bad.

$ch_2 = curl_init($url2);
$ch_3 = curl_init($url3);


curl_setopt( $ch_2, CURLOPT_URL, $url2 );
curl_setopt($ch_2, CURLOPT_USERAGENT, $User_Agent);
curl_setopt($ch_2, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch_2, CURLOPT_ENCODING, "");
curl_setopt($ch_2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_2, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch_2, CURLOPT_POSTFIELDS, $data_json);

curl_setopt( $ch_3, CURLOPT_URL, $url3 );
curl_setopt($ch_3, CURLOPT_USERAGENT, $User_Agent);
curl_setopt($ch_3, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch_3, CURLOPT_ENCODING, "");
curl_setopt($ch_3, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_3, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch_3, CURLOPT_POSTFIELDS, $data_json2);

// build the multi-curl handle, adding both $ch
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch_2);
curl_multi_add_handle($mh, $ch_3);

$active = null;
// Handles ausführen
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) == -1) {
usleep(100);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}

//close the handles
curl_multi_remove_handle($mh, $ch_2);
curl_multi_remove_handle($mh, $ch_3);
curl_multi_close($mh);

$response_1 = curl_multi_getcontent($ch_2);
$response_2 = curl_multi_getcontent($ch_3);
echo "$response_1 $response_2"; // output results 

var_dump(curl_getinfo($ch));
var_dump(curl_getinfo($ch_2));
var_dump(curl_getinfo($ch_3));

Заранее благодарю за любую помощь и совет.

...