Curl 卷曲柱尺寸限制

Curl 卷曲柱尺寸限制,curl,sas,Curl,Sas,我正在SAS中调用cURL来执行POST请求。我的代码运行良好,但当我提交更大的请求时,post输出(json文件)被截断。json文件的最大大小是1098304,尽管我在cURL中设置了--max filesize选项,在SAS中设置了等于10000000的lrecl。我正在Windows7上运行SAS 9.3。注意,我需要能够下载更大的json文件,因此不能简单地限制输出的大小。有人遇到过这个问题吗?如果是,你是如何处理的 Update1:现在使用x命令而不是filename pipe语句运

我正在SAS中调用cURL来执行POST请求。我的代码运行良好,但当我提交更大的请求时,post输出(json文件)被截断。json文件的最大大小是1098304,尽管我在cURL中设置了--max filesize选项,在SAS中设置了等于10000000的lrecl。我正在Windows7上运行SAS 9.3。注意,我需要能够下载更大的json文件,因此不能简单地限制输出的大小。有人遇到过这个问题吗?如果是,你是如何处理的

Update1:现在使用x命令而不是filename pipe语句运行curl。整个文件将转储到cmd窗口中。我希望将输出存储在文本文件中。我尝试在cURL命令的开头和结尾同时使用-oc:\json.txt和-oc:\json.txt,但都不起作用。文件被转储到cmd窗口中。有人知道我做错了什么吗?也许我可以使用另一个cURL命令

Update2:在花了一些时间试验代码之后,我发现cURL命令中的“POST”文本是不必要的。我把它取下来,一切都很好。cURL将整个输出直接转储到一个文本文件中,然后我可以使用procgroovy解析json。成功

非常感谢Joe、Robert和user667489提供的有用建议和分析

最终代码:

x   "curl -d @C:\Users\Bill\Desktop\curl.txt -H ""Authorization: OAuth oauth_consumer_key=""""&oauth_consumer_key"""",oauth_token=""""&oauth_token"""",oauth_signature_method=""""&oauth_signature_method."""",
        oauth_signature=""""&oauth_signature."""",oauth_timestamp=""""&oauth_timestamp."""",oauth_nonce=""""&oauth_nonce."""",oauth_version=""""&oauth_version."""""" 
        -k &url. -o C:\json.txt";

正如您所知,SAS的最大行大小为32767,因此,除非响应包含多行,否则您仍需要找到处理该问题的方法。检查截断值的长度。应该告诉你这是否是问题所在

编辑:仅适用于SAS 9.2及更早版本。感谢Joe的澄清。

根据,LRECL的限制应为1GB(远远超过您的限制)。然而,我在过去遇到过1MB(1024^3)似乎是限制的问题。另一方面,这比你看到的要小。因此,我不确定我是否可以直接说我知道问题是什么

一种可能是您正在读取UTF8字符(或其他unicode变体)。在这种情况下,LRECL限制可能是字节,而不是字符。因此,我可以看到从最大值减少了4倍左右,具体取决于unicode变体。您可以在lrecl=字段中尝试
MAX
,并查看它的功能;希望不是32767(正如LRECL系统选项仍然声称的那样)。仍然没有解释差异,但有可能考虑。如果将总长度从10MB提高到
MAX
或30MB或100MB或任何更高的数字,则可以解释这一点。我还会将curl最大文件大小提高到相同的数量(或者至少尝试将其提高到更大的大小),以查看SAS处理管道的方式是否存在问题


可以尝试的一件事是使用
RECFM=F
读入它。我认为,当您从文件名中读取时,这将出现在
infle
语句中;您可以将它解析成1MB(或更小)的串,并以这种方式进行处理。如果您在数据中有这样的能力,您还可以使用
termstr
或其他方法用分隔符对其进行解析(常见的方法是对html使用
termstr='>'
,对json使用
是常见的)。你没有发布你的json解析正在做什么,所以我不能发表评论,但我要说的是,从我的html解析经验(以及一些json)来看,当一开始不是巨大的行时,解析它更容易。

根据Joe的建议,我使用x命令运行cURL,然后将输出直接保存到文本文件中。这规避了SAS中的任何限制。然后,我可以使用procgroovy解析json数据。最后的cURL代码在线程的第一篇文章中。

如果通过提示/批处理文件运行相同的cURL命令,是否会遇到相同的错误?谢谢您的建议。我应该在发帖之前就这样做。这是一个SAS问题。当我从命令行运行cURL时,我得到了整个文件。没有截断。JSON文件应该有多大?没有那么大,可能是2-4mb的文本文件形式。你能提供你用来读取它的数据步骤代码吗?Rob,这是不真实的(至少在9.2或更高版本,我不知道之前的情况)。如果您使用32767的_infle u,SAS有一个最大线宽,但他会将此作为一个显式错误。否则这取决于操作系统的最大值。罗伯特,非常感谢你的想法。响应确实包含多行。每条线的最大长度为32759。所有线路的总长度为1098282,刚好低于1098304的lrecl。注意,我试图在filename语句中将lrecl增加到10M。是否有其他方法增加lrecl?或者我需要调整另一个选项?缓冲区大小?再次感谢。乔,谢谢你的想法。我正在Windows7 Professional上运行SAS 9.3。另外,我将输出转储到文本文件中。但是,文本文件的大小应该没有问题。我已经创建了超过200mb的文本文件。事实上,我知道这不是问题所在。在将数据转储到文本文件之前,我将其放入sas日志。数据被截断。@Joe-无论填充大小如何,您仍然使用32767的最大字符字段,因此实际上是一样的。我想补充一句,这是荒谬的。@Joe-还有,任何警告都不会依赖于datastep file语句上的truncover/Floover/missover设置吗?哇,非常感谢你的分析,Joe。我尝试将lrecl和cURL max文件大小增加到1B。不幸的是,它没有解决问题。SAS仍将lrecl修复为1098304。另外,我正在使用procgroovy解析json文件。除了增加json文件大小外,一切都很正常。嗯……我会做更多的研究,然后再报告。我讨厌认为SAS是如此有限,以至于它不能处理超过1米长的记录。顺便说一句,因为这是一个SAS问题,我在SAS.com上启动了一个线程。链接:是吗