2012-03-08 2 views
1

Мое приложение должно обновить статус и добавить изображения к обновлению, так что status/update_with_media - лучший выбор. На моей платформе нет библиотеки, поэтому я портировал PorlarSSL (библиотеку SSL, написанную на C), и реализовал протокол HTTP по протоколу TCP в C. Вот мои коды для запроса API update_with_media.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-сообщений достаточно? Если неверен (например, больше, чем фактическая длина отправки), это вызовет какие-либо проблемы?

Мое рукопожатие с твиттером в порядке, и я могу запросить другие данные из Twitter, поэтому мой интернет в порядке.

Может ли кто-нибудь мне помочь?

ответ

2

С каким сервером вы подключаетесь? Загрузка фотографий должна быть направлена ​​на upload.twitter.com.

Кроме того, Content-Disposition: from-data; name="media[]"; filename="asddf.gif" содержит типографию from-data.

+0

Год! вы правы, я постоянно устанавливаю 'api.tiwtter.com' в своих параметрах TCP-подключения, поэтому' api.twitter.com' не может распознать 'upload.twitter.com', поэтому сервер говорит об ошибке 404. Но когда я исправляю ошибку, я сразу же получил ошибку 403 Forbidden: '{" request ":" \/1 \/statuses \ /update_with_media.json "," error ":" Ошибка создания статуса. "}' – coanor

+0

Не 'from-data',' form-data' является правильным. – coanor

+0

После нескольких часов отладки, я могу получить код 200 сейчас, и изображение будет отправлено на Twitter. Строго согласно [этой проблеме] (https://dev.twitter.com/discussions/1525), но я отсортировал тело по имени. Еще одно: ** Не забывайте последний '\ r \ n' после тела сообщения **. Спасибо А.Р.К. – coanor