Помогите разобраться с curl.exe и заголовком content-Length

nas1234

вот сочинил я допустим такую команду:
curl --output ans.xml -H "Content-Type:text/xml" -H "Content-Length:195628" -F "file=<test.xml" http://xxx.xxx.xx.xxx:8400/invoke/GSPS/service 

размер файла test.xml 195539, но если указать его именно такой, то на сервере он обрезается с конца.
опытным путём выяснилось, что нужно добавить 89 к размеру и тогда файл приходит полностью.
89 символов это как длина двух хедеров и адреса. это совпадение или именно так и должно быть?
когда я делал то же самое средствами winhttprequest, там я в хедер писал именно размер файла.
это особенность курла или что?

AlexV769

А зачем вообще клиенту задавать эти заголовки?

nas1234

требование сервера. наличие именно этих двух заголовков обязательно.

AlexV769

tcpdump сессии есть?

nas1234

нет, но постараюсь завтра сделать

vall

это особенность курла или что?
я думаю это особенность сервера

vchikvin

Да, curl дергал и без передачи размера сообщения непосредственно на линусковом серваке.
Похоже действительно веб сервис сервака так настроен.
Если поможет, то вот на пхп вызов сервиса от клиента серверу:
<?php
$soap = curl_init("http://172.31.0.33:3001/gadservice.php");
curl_setopt($soap, CURLOPT_POST, 1);
$request = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://172.31.0.33:3001/">
<env:Body>
<ns1:Request>
<ns1:gadRequest>
<gad_agent_id>avter
</gad_agent_id>
<gad_session_id>0011001100110011
</gad_session_id>
</ns1:gadRequest>
</ns1:Request>
</env:Body>
</env:Envelope>
XML;
curl_setopt($soap, CURLOPT_HTTPHEADER,
array('Content-Type: text/xml; charset=utf-8',
'Content-Length: '.strlen($request)));
curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($soap);
curl_close($soap);
Оставить комментарий
Имя или ник:
Комментарий: