Hallo an die Runde,
Was soll mein Skript können?
per curl Aufruf eine Webapi ansprechen
an diese per POST ein XML Request oder zu Testzwecken auch
einfach Formulardaten übergeben.
(.asmx)
Was funktioniert nicht?
Es kommt ein 411 Fehler zurück ==> Content-Length Required
Google alles durchsucht keine Lösung gefunden .
Hab schon öfters mit curl gearbeitet aber der Fehler ist mir neu
vorallem weil ich den content-length im Header mitsende.
Ich hoffe ihr seht evtl. ein Fehler, wenn nicht kann es an dem Zielserver liegen
von der Config her? Oder braucht dieser evtl. mehr infos von mir im Header?
Hier mein Skript:
Ausgabe:
Request:
POST HTTP/1.1
Host: www.XXXX.com
Content-Length: 39
Content-type: application/x-www-form-urlencoded
Connection: close
username=XXXXXXXXXXXX&apiKey=XXXXXXXXXX
Response:
HTTP/1.1 411 Length Required
Content-Type: text/html
Date: Tue, 19 Oct 2010 09:39:17 GMT
Connection: close
Content-Length: 24
<h1>Length Required</h1>
Was soll mein Skript können?
per curl Aufruf eine Webapi ansprechen
an diese per POST ein XML Request oder zu Testzwecken auch
einfach Formulardaten übergeben.
(.asmx)
Was funktioniert nicht?
Es kommt ein 411 Fehler zurück ==> Content-Length Required
Google alles durchsucht keine Lösung gefunden .
Hab schon öfters mit curl gearbeitet aber der Fehler ist mir neu
vorallem weil ich den content-length im Header mitsende.
Ich hoffe ihr seht evtl. ein Fehler, wenn nicht kann es an dem Zielserver liegen
von der Config her? Oder braucht dieser evtl. mehr infos von mir im Header?
Hier mein Skript:
PHP-Code:
$api_data[request] = 'username=XXXXXXXXXXXX&apiKey=XXXXXXXXXX';
$api_data[headers][] = "POST HTTP/1.1\r\n";
$api_data[headers][] = "Host: ".$_SERVER['HTTP_HOST']."\r\n";
$api_data[headers][] = "Content-Length: ".strlen($api_data[request])."\r\n";
$api_data[headers][] = "Content-type: application/x-www-form-urlencoded\r\n";
$api_data[headers][] = "Connection: close\r\n";
$api_data[host] = 'http://IP:PORT/script.asmx';
$start = array_sum(explode(' ', microtime()));
for($connection_try=0;$connection_try<=0;$connection_try++)
{
unset($ch);
unset($ressource);
$ch = curl_init();
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $api_data[headers]);
curl_setopt($ch, CURLOPT_URL, $api_data[host]);
//curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $api_data[request]);
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$ressource = curl_exec($ch);
$stop = array_sum(explode(' ', microtime()));
$totalTime = $stop - $start;
if ( curl_errno($ch) )
{
$ressource = 'ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
}
else
{
$returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
switch($returnCode)
{
case 404:
$ressource = 'ERROR -> 404 Not Found';
break;
default:
break;
}
}
curl_close($ch);
}
Request:
POST HTTP/1.1
Host: www.XXXX.com
Content-Length: 39
Content-type: application/x-www-form-urlencoded
Connection: close
username=XXXXXXXXXXXX&apiKey=XXXXXXXXXX
Response:
HTTP/1.1 411 Length Required
Content-Type: text/html
Date: Tue, 19 Oct 2010 09:39:17 GMT
Connection: close
Content-Length: 24
<h1>Length Required</h1>
Kommentar