在将文件上传到https://graph.facebook.com/v2.6/me/messages?access_token=xxxx
时遇到问题
- API documentation
据我所知,文档提供的curl请求和我们的实现请求之间只有一个重要区别 - 我们使用“content-type”:“application / octet-stream”而不是解析我们发送的文件的确切mimetype。如果这可能是问题,我很想知道,因为我们从FB回来的所有内容都是通用的“抱歉,出了问题。” HTML回复。
有问题的请求:
通过cURL(成功):
POST / HTTP/1.1
Host: localhost:3000
User-Agent: curl/7.51.0
Accept: */*
Content-Length: 463
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------ce70fccbff4ca73d
--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="recipient"
{"id":"100016849000254"}
--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="message"
{"attachment":{"type":"file", "payload":{}}}
--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="filedata"; filename="test.txt"
Content-Type: text/plain
test text file
--------------------------ce70fccbff4ca73d--
通过我们的实施(失败):
POST / HTTP/1.1
Transfer-Encoding: identity
Content-Type: multipart/form-data; boundary=---------------------------cbriejsxmxnhcdok
Content-Length: 642
Host: localhost:3000
User-Agent: hackney/1.8.6
-----------------------------cbriejsxmxnhcdok
content-length: 24
content-type: application/octet-stream
content-disposition: form-data; name="recipient"
{"id":"100016849000254"}
-----------------------------cbriejsxmxnhcdok
content-length: 43
content-type: application/octet-stream
content-disposition: form-data; name="message"
{"attachment":{"type":"file","payload":{}}}
-----------------------------cbriejsxmxnhcdok
content-length: 21
content-type: application/octet-stream
content-disposition: form-data; name="filedata"; filename="test.txt"
test text file
-----------------------------cbriejsxmxnhcdok--
我们已经尝试完全匹配所有标头,包括Accept: */*
(完全没有区别)和Expect: 100-continue
(导致无法打开写入流错误)。此外,我们在邮递员中尝试了相同的请求 - 它工作正常,看起来几乎与卷曲请求相同。
修改:只是尝试手动将filedata
部分中的内容类型设置为text/plain
,但同样失败。
编辑2:成功的原始卷曲请求:
curl \
-F message='{"attachment":{"type":"file", "payload":{}}}' \
-F recipient='{"id":"<recipientId>"}' \
-F filedata=@./test.txt \
"https://graph.facebook.com/v2.6/me/messages?access_token=<token>"
我现在无法真正发布我们的实现代码,因为我的位置涉及底层架构上方的略微抽象的接口,而我现在没有时间找到有问题的特定行。另外,它是用erlang编写的,我并不完全理解。