我需要在尽可能低的级别(即:套接字级别)与远程 HTTP 服务器交互,因为我的目标是一个非常小的嵌入式系统,不支持更高级别的库(它是一个完全没有操作系统的裸机 uController,并且通过串行线与 GSM 调制解调器通话;调制解调器对套接字有一些支持,但除此之外没有)。
基本需要是使用 POST 上传“文件”。
我已经准备好所有需要的 Header/Body 并且它“通常有效”。
问题是我随机收到“HTTP/1.1 502 Bad gateway error”响应,随着“文件”大小的增加,这种情况更有可能发生。
我理解这意味着反向代理前端(显然是 nginx)和后端之间存在一些问题,但我完全无法控制这些(实际上我真的不知道实际设置如何,除了可以从(光)试探)。
我目前的策略是打开一个普通的套接字并发送以下序列(点代表二进制数据):
POST /path/to/websend.php HTTP/1.0
Host: host.domain.tld
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=AaB03x
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Accept: */*
Content-Length: <full_length>
--AaB03x
Content-Disposition: form-data; name="IV"
Content-Type: application/data
Content-Transfer-Encoding: binary
000102030405060708090A0B0C0D0E0F
--AaB03x
Content-Disposition: form-data; name="S_TXT_FILE"; filename="FILENAME_s.txt"
Content-Type: application/data
Content-Transfer-Encoding: binary
..............................................................
..............................................................
...... several 512byte blocks ................................
..............................................................
..............................................................
--AaB03x--
我可以做些什么来提高可靠性吗?我已经进行了多次重试,这确实有效,但有时我需要重试六次或更多次才能得到肯定的答案(200 OK)。
请注意,我在 rety 上发送完全相同的序列并且它成功了......最终。
我需要发送两部分,因为内容是加密的,第一部分是需要的“初始化向量”。