gpt4 book ai didi

cocoa - 这是来自 iPad 的格式错误的 http 请求吗?它会杀死 Node.js 多部分解析器

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:37 26 4
gpt4 key购买 nike

以下代码在 iPad 应用程序中用于向 Node.js Web 服务器发送 HTTP 请求,这会产生以下错误,但在常规 HTML+浏览器表单中工作正常。

服务器是 Node.js + formidable它有一个多部分解析器,仅在 this line of code 上终止。有了这个error :

message: parser error, 0 of 29162 bytes parsed

stack: Error: parser error, 0 of 29162 bytes parsed at IncomingForm.write (/usr/local/lib/node/.npm/formidable/0.9.8/package/lib/formidable/incoming_form.js:120:17) at IncomingMessage. (/usr/local/lib/node/.npm/formidable/0.9.8/package/lib/formidable/incoming_form.js:73:12)

at IncomingMessage.emit (events:27:15)
at HTTPParser.onBody (http:100:23)
at Stream.ondata (http:763:22)
at IOWatcher.callback (net:494:29)
at node.js:768:9

这是 iPad 代码:

NSMutableURLRequest * theRequest   = [[NSMutableURLRequest alloc] initWithURL:url];

[theRequest setTimeoutInterval:60];

[theRequest setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];

[theRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];


//media

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"image\"; filename=\"iosaudio.cai\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:theAudio]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

// setting the body of the post to the reqeust
[theRequest setHTTPBody:body];

发送的请求格式是否错误?如果是这样,为什么以及应该如何做?

最佳答案

实际上,我们在发布到 Node.js 的一些 iOS 代码中也遇到了同样的问题。我们的问题是第一个边界之前的 CR-LF。 Node.js 使用一个解析 MIME 的组件,该组件对格式非常挑剔,前面的 CR-LF 字符被视为格式错误。我不确定,但最后一个边界后面的 CR-LF 可能会导致同样的问题。您的第一个边界应如下所示:

[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

您的最终边界应如下所示:

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

请注意,中间边界应包括边界之前和之后的 CR-LF:

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

我对规范的阅读表明您可以在第一个边界之前和最终边界之后拥有数据,但解析器应该忽略这些区域。 Node.js 用于解析此内容的组件非常挑剔。解析组件有一个补丁,但尚未进入项目。

关于cocoa - 这是来自 iPad 的格式错误的 http 请求吗?它会杀死 Node.js 多部分解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com