我正在将数据发送到带有Arduino的服务器,这需要逐行构建HTML POST.我不一定知道Content-Length a-priori,所以我使用"chunked"编码.
当我尝试使用rfc2616中指定的"Transfer-Encoding"选项从Wikipedia发布此示例帖子时
client.println("POST /myurl HTTP/1.1");
client.println("Host: 12.345.679.999"); // replaced with the test server's IP
client.println("User-Agent: Arduino/1.0");
client.println("Transfer-Encoding: chunked");
client.println();
client.println("4");
client.println("test");
client.println("0");
client.println();
Run Code Online (Sandbox Code Playgroud)
或者,使用转义字符显式:
client.print("4\r\ntest\r\n0\r\n\r\n");
Run Code Online (Sandbox Code Playgroud)
我从服务器收到错误:
HTTP/1.1 411 Length Required
A request of the requested method POST requires a valid Content-length.
Server: Apache/2.2.22 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)
但是,"chunked"编码不应该要求Content-Length头字段,请参阅rfc2616中的4.4 - 消息长度
我错过了一个领域吗?为什么这个电话不起作用?
为了记录,非Chunked-Encoding工作:
if(client.connect(server, 80)){
String PostData = "test";
Serial.println("POST /myurl HTTP/1.1");
client.println("Host: 12.345.679.999"); // replaced with the test server's IP
Serial.println("User-Agent: Arduino/1.0"); …Run Code Online (Sandbox Code Playgroud) 这些Curl文档:http://curl.haxx.se/docs/manpage.html#-d列出了许多布尔选项.
如何在RCurl中的postForm调用中指定这些选项?例如,如何指定--sslv3标志?
我试过了
postForm(url, .opts = list(sslv3=TRUE))
Run Code Online (Sandbox Code Playgroud)
但收到错误:
Warning message:
In mapCurlOptNames(names(.els), asNames = TRUE) :
Unrecognized CURL options: sslv3
Run Code Online (Sandbox Code Playgroud)
提前致谢.
解
通过一些反复试验,我发现这有效:
options(RCurlOptions = list(sslversion=3))
postForm(url)
Run Code Online (Sandbox Code Playgroud)
如果有人可以澄清如何将Curl选项转换为RCurl选项,那将是值得赞赏的!
我正在编写一系列与服务器通信的MATLAB函数urlread.此程序包中用于进行此调用的每个函数都需要身份验证username和key.
我宁愿不要求用户在传递username和key调用每一个功能的时候.相反,我更喜欢有一个signin(username, key)函数来设置/保存这些变量,使得这个包中的每个函数都可以调用.
我现在的解决方案是signin.m保存username和key临时文件,并修改finish.m以在MATLAB关闭时擦除此临时文件.包中的每个函数都将从该临时文件加载这些变量.但是,如果有人强行退出MATLAB,这个临时文件将不会被删除(对吗?).
另一种解决方案是signin保存username和key作为全局变量.但是,如果用户调用clear all,这些变量将被删除工作空间,用户将需要signin再次调用(这是一个麻烦).
有没有办法设置全局的"会话"变量,而不是用clear all命令删除?还有其他建议吗?
当我尝试使用这种通用格式的代码时,我收到编译器的错误:
在classname.hpp中
#include "otherclass.hpp"
class classname {
public:
typedef struct {
otherclass membername(sometype);
} structname;
void functionname(structname& exampleData);
}
Run Code Online (Sandbox Code Playgroud)
在main.cpp中,我定义了一个变量exampleData:
classname::structname exampleData;
Run Code Online (Sandbox Code Playgroud)
在classname.cpp中,我有一个使用exampleData的函数,并尝试初始化struct的成员,membername:
void classname::functionname(structname& exampleData){
sometype a;
exampleData.membername(a);
}
Run Code Online (Sandbox Code Playgroud)
我从编译器收到错误说明:
未定义的符号:
classname::structname::membername(sometype)"classname::functionname(classname::structname&)在classname.o中引用.ld:符号未找到
我认为我的错误在于线
otherclass membername(sometype)
Run Code Online (Sandbox Code Playgroud)
我还以为它可能是:
otherclass membername(sometype& a)
Run Code Online (Sandbox Code Playgroud)
但我收到了同样的错误.
我想知道这是否合法,在构造函数不是()的类中的结构中有一个成员.在main.cpp中,当我声明exampleData时,membername尚未初始化.这是合法的还是我在错误的地方打猎?