我知道在stackoverflow中有很多类似的问题。但这实际上是不同的:)
我的问题是,Apache(2.4.6)不能处理cURL特别使用的url中的空格。好吧,我有一个如下网址:
http://10.0.0.1:1234/Some服务/根目录?func = getMessage
如果我在任何流行的浏览器中浏览此URL,它们会将空格('')更改为%20。这样,Apache可以处理请求(或者wget也可以)。
但是,当我使用cURL时,它不会更改为%20,在这种情况下,Apache返回错误400。我认为原因是,在GET Url的末尾有一个空格,然后指定了HTTP协议来了。 如: GET Some Service / Root?func = getMessage HTTP1.1
问题是我无法触摸或在cURL网站上执行任何更新。例如,我无法在cURL请求之前执行sed操作。所以考虑像cURL网站就像黑盒子一样。我对该网站没有控制权。 因此,我真的只需要在Apache中解决此问题。不幸的是,这是我唯一的选择。
如果URL包含%20而不是真实的空格(''),我发现可以使用的RewriteRules。例如,\ s仅适用于我在curl请求中写下%20的情况。例如: curl -v“ http://10.0.0.1:1234/Some %20 Service / Root?func = getMessage”
但是如果我这样使用: curl -v“ http://10.0.0.1:1234/Some服务/根目录?func = getMessage” 然后由于空间的原因,它得到了Erro 400。
例如,如果存在一个或多个空格,则存在%20的following solution:
#只要URI中有多个空格,就会重复执行
RewriteRule“ ^(\ S *)\ s +(\ S *。*)$” $ 1 + $ 2 [N,NE]
#在URI中恰好有1个空格时执行
RewriteRule“ ^(\ S *)\ s(\ S *)$” / $ 1 + $ 2 [L,R = 302,NE]
所以我的链接可能不像下面这样简单: http://10.0.0.1:1234/Some服务/根目录?func = getMessage
可能包括一个空格:),但是会有多个参数,例如 http://10.0.0.1:1234/Some服务/根目录?func = doSomething&id = 123&pid = 123&message = blabla&name = john&surname = doe
但是,无论如何,如果有一个以上的空白,我还需要防止可能的问题。
预先感谢
答案 0 :(得分:0)
似乎Nginx可以处理空格或空格。 Nginx不给400。