Как я могу получить длину скручиваемости? - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь войти на удаленный веб-сайт, который требует от меня ввести имя пользователя, пароль и войти через почту.Я использую опцию Curl

curl_setopt($ch, CURLOPT_POSTFIELDS , $postData);

и присваиваю свою информацию следующим образом

$postData['email'] = 'smart@acme.com';
$postData['password'] = 'Secret';
$postData['Submit']='Login';

Но удаленный сервер жалуется на

HTTP Error 411. The request must be chunked or have a content length.

Так как я могу сказатьдлина содержимого моего postData?

Ответы [ 3 ]

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

Не уверен, что это сработает для вас или нет? , но вам нужно что-то подобное с strlen() для установки Content-Length .

$postData= array("email" => "smart@acme.com", "password" => "Secret","Submit"=>"Login");                                                                    
$data_string = json_encode($postData);                                                                                   

$ch = curl_init('http://api.remote.com');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);
0 голосов
/ 09 октября 2018
$ch = curl_init();
$data['email'] = 'smart@acme.com';
$data['password'] = 'Secret';
$data['Submit']='Login';
curl_setopt($ch, CURLOPT_URL, '****/upload.php');

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

заголовок запроса:

[CONTENT_LENGTH] => 357

[CONTENT_TYPE] => multipart / form-data;border = ------------------------ aac448045c2fe517

однако, если мы передадим аргументы через строку, подобную этой

$ch = curl_init();
$data['email'] = 'smart@acme.com';
$data['password'] = 'Secret';
$data['Submit']='Login';

echo strlen(http_build_query($data));

curl_setopt($ch, CURLOPT_URL, '*/upload.php');

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

curl_exec($ch);

, а заголовок этого запроса

[CONTENT_LENGTH] => 51

[CONTENT_TYPE] => application / x-www-form-urlencoded

, поэтому лучше использовать application/x-www-form-urlencoded, чем multipart/form-data, так как легко рассчитать длину содержимого

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

Чтобы получить длину PostData, вы можете использовать PHP-функцию count, чтобы получить ее.

Попробуйте:

#Get the length
$postData_len = count($postData);

#Set Curl Header with Content Length
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: '.$postData_len));

Приведенный выше код для вычисления длины массива postDataи затем установите заголовок Curl, если вы ищете 1 строку кода, попробуйте это:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: '.count($postData)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...