私のアプリケーションはステータスを更新してアップデートに画像を追加する必要がありますので、status/update_with_media
が最適です。自分のプラットフォームで使用できるライブラリがないので、PorlarSSL
(Cで書かれたSSLライブラリ)を移植し、CのTCPプロトコルでHTTPプロトコルを実装しました。ここにupdate_with_media
APIをリクエストするコードがあります。Twitter API `status/update_with_media`返信` 404 Not Found`
TCP送信バッファ(HTTPヘッダーを含めると身体を投稿する)である。これらのフィールドは\r\n
で区切られ
POST /1/statuses/update_with_media.json HTTP/1.1
Accept: */*
Host: upload.twitter.com
Authorization: OAuth oauth_consumer_key="wafabKbGRc16RUWgQvD4g", oauth_nonce="UvA44TqLLGWlHy3TDU8BPgAAAAAD", oauth_signature="62FJbljZOk9vOHU7RYCIn%2Fyl68c%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1331134259", oauth_token="46043095-aRPvEBFqHEiDwM0wWURJskAkdrLIJGMLRqI5yx1Po", oauth_version="1.0"
Connection: Keep-Alive
Content-Length: 659
Content-Type: multipart/form-data; boundary=--xyz
----xyz
Content-Disposition: form-data; name="media[]"; filename="asddf.gif"
Content-Type: application/octet-stream
<binary-image-data>
----xyz
Content-Disposition: form-data; name="status"
hello word
----xyz--
、空白行が\r\n
を期待しているので、私は形式が正しいことを確信しています。 TCPバッファ(バイナリ画像データを含む)はその後、SSLによって暗号化され、その後、Twitterへ送るが、返されたボディは、HTMLドキュメントで、HTTPヘッダーは、私はこれが何を意味するか知りたい
HTTP/1.1 404 Not Found
Date: Thu, 08 Mar 2012 06:16:46 GMT
Set-Cookie: k=10.34.145.134.1331187406993104; path=/; expires=Thu, 15-Mar-12 06:16:46 GMT; domain=.twitter.com
Last-Modified: Mon, 27 Feb 2012 21:57:35 GMT
Accept-Ranges: bytes
Content-Length: 12882
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Server: tfe
のですか?バイナリイメージデータはSSLで暗号化する必要がありますか?またはstatus/update_with_media
はSSLを必要とせず、HTTPポストだけで十分ですか? Content-Length
が間違っている場合(実際の送信長よりも大きい場合など)、問題はありますか?
Twitterで私のハンドシェイクはOKです。私はTwitterから他のデータをリクエストできます。私のインターネットはOKです。
誰でも手伝ってもらえますか?
年!私は 'api.tiwitter.com'をTCP接続パラメータに設定しているので、' api.twitter.com'は 'upload.twitter.com'を認識できないので、サーバは404エラーを出します。 エラーを修正するとすぐに403 Forbiddenエラーが発生しました: '{" request ":" \/1 \/status \ /update_with_media.json "、" error ":"ステータスの作成中にエラーが発生しました。 – coanor
'from-data'ではなく、' form-data'が正しいです。 – coanor
数時間のデバッグの後、私は今200のコードを手に入れることができ、画像はTwitterの成功のためにPOSTされます。厳密に[この問題](https://dev.twitter.com/discussions/1525)によるが、私はボディを 'name'でソートした。もう1つは**最後に '\ r \ n'をポストボディ**の後に忘れないことです。ありがとう、A.R.K. – coanor