我的应用程序需要更新状态并将图像添加到更新中,因此status/update_with_media
是最佳选择。在我的平台上没有可用的库,因此我移植了PorlarSSL
(用C语言编写的SSL库),并在C协议中实现了TCP协议的HTTP协议。以下是我的代码,用于请求update_with_media
API。Twitter API`status/update_with_media` return`404 Not Found`
TCP发送缓冲区(包括HTTP标头和后体)是:
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
分离,空行是期望\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 post就足够了?如果Content-Length
不正确(例如,大于实际发送长度),是否会导致任何问题?
我与twitter的握手是好的,我可以从Twitter请求其他数据,所以我的互联网是好的。
任何人都可以帮助我吗?
年!你是对的,我已经在我的TCP连接参数中不断设置'api.tiwtter.com',所以'api.twitter.com'无法识别'upload.twitter.com',所以服务器说404错误。 但是当我修复错误时,我立即得到了403 Forbidden错误: '{“request”:“\/1 \/statuses \ /update_with_media.json”,“error”:“错误创建状态。”} – coanor 2012-03-09 06:34:26
不是'from-data','form-data'是正确的。 – coanor 2012-03-09 07:36:33
经过数小时的调试,我现在可以获得200个代码,并且图像被发布到Twitter成功。严格按照[这个问题](https://dev.twitter.com/discussions/1525),但我按'name'排序了主体。另外一个是**不要忘记帖子后**的最后一个'\ r \ n'。谢谢A.R.K. – coanor 2012-03-09 10:31:21