2010-06-28 3 views
11

Ich habe dieses kleine Skript in PHP, die eine einfache Anfrage an Twitter senden für Ihren Status zu aktualisieren, habe ich dies versucht: http://pratham.name/twitter-php-script-without-curl.html, und es funktioniert. Nun, ich möchte diese Anfrage mit netcat senden, aber das funktioniert nicht, warum?POST Anfrage mit Netcat senden

Ich sende Anfrage auf diese Weise:

echo -e $head | nc twitter.com 80 

Die $ Kopf mein Kopf sind, die ich mit PHP auch versucht haben, so ist es recht.

Wer weiß, wie ich das machen kann? Dank an alle.

bearbeiten.

head="POST http://twitter.com/statuses/update.json HTTP/1.1\r\n 
Host: twitter.com\r\n 
Authorization: Basic myname:passwordinbs64\r\n 
Content-type: application/x-www-form-urlencoded\r\n 
Content-length: 10\r\n 
Connection: Close\r\n\r\n 
status=mymessage"; 

echo -e $head | nc twitter.com 80 
+0

Wir sind keine Gedankenleser. Verknüpfen Sie das Skript und zeigen Sie den Inhalt von $ head an. –

+0

Entschuldigung, ich habe die Nachricht bearbeitet. – fixo2020

+0

Danke, bitte zeigen Sie auch, wie Sie '$ head' initialisieren. Wenn Sie 'curl' oder' wget' haben, wird das wahrscheinlich einfacher. –

Antwort

23

Die Daten, die Sie senden, sind nicht korrekt. Hier ist der Befehl, den ich bin Ausführung:

$ head="POST http://twitter.com/statuses/update.json HTTP/1.1\r\n 
Host: twitter.com\r\n 
Authorization: Basic myname:passwordinbs64\r\n 
Content-type: application/x-www-form-urlencoded\r\n 
Content-length: 10\r\n 
Connection: Close\r\n\r\n 
status=mymessage"; echo $head | nc twitter.com 80 

HTTP/1.1 400 Bad Request 
Date: Tue, 29 Jun 2010 10:19:38 GMT 
Server: Apache 
Vary: Accept-Encoding 
Content-Length: 226 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>400 Bad Request</title> 
</head><body> 
<h1>Bad Request</h1> 
<p>Your browser sent a request that this server could not understand.<br /> 
</p> 
</body></html> 

Ich bin ein tcpdump parallel laufen und hier ist das, was es mir zeigt:

0x0020: 5018 ffff 671f 0000 504f 5354 2068 7474 P...g...POST.htt 
0x0030: 703a 2f2f 7477 6974 7465 722e 636f 6d2f p://twitter.com/ 
0x0040: 7374 6174 7573 6573 2f75 7064 6174 652e statuses/update. 
0x0050: 6a73 6f6e 2048 5454 502f 312e 310d 0a20 json.HTTP/1.1... 
0x0060: 486f 7374 3a20 7477 6974 7465 722e 636f Host:.twitter.co 
0x0070: 6d0d 0a20 4175 7468 6f72 697a 6174 696f m...Authorizatio 
0x0080: 6e3a 2042 6173 6963 206d 796e 616d 653a n:.Basic.myname: 
0x0090: 7061 7373 776f 7264 696e 6273 3634 0d0a passwordinbs64.. 
0x00a0: 2043 6f6e 7465 6e74 2d74 7970 653a 2061 .Content-type:.a 
0x00b0: 7070 6c69 6361 7469 6f6e 2f78 2d77 7777 pplication/x-www 
0x00c0: 2d66 6f72 6d2d 7572 6c65 6e63 6f64 6564 -form-urlencoded 
0x00d0: 0d0a 2043 6f6e 7465 6e74 2d6c 656e 6774 ...Content-lengt 
0x00e0: 683a 2031 300d 0a20 436f 6e6e 6563 7469 h:.10...Connecti 
0x00f0: 6f6e 3a20 436c 6f73 650d 0a0d 0a20 7374 on:.Close.....st 
0x0100: 6174 7573 3d6d 796d 6573 7361 6765 0a atus=mymessage. 

Sehen Sie den Fehler? Bei jedem Zeilenumbruch sind drei Zeichen, aber es sollten nur zwei sein. Dies geschieht, weil Sie in Ihrer Variablendefinition einen echten Zeilenumbruch haben, der zu einem Leerzeichen in der Shell wird. Z.B.

$ head="line1 
line2" ; echo $head 

line1 line2 

Versuchen Sie, alles in einer Zeile zu schreiben.

+0

Ok, habe es gelöst. Vielen Dank, mein Herr. – fixo2020

7

Wenn Sie keine Anführungszeichen um "$ head" setzen, ist Ihre Formatierung nicht so, wie Sie (oder Twitter) es erwarten. Da Ihre Variable auch Zeilenumbrüche/Zeilenumbrüche enthält, wird es wahrscheinlich helfen, das Echo davon abzuhalten, sein eigenes zu liefern.

echo -ne "$head" | nc twitter.com 80