Android httpcomponents和httpurlconnection在我的站点上的工作方式不同
这是一个非常不寻常的问题。我只是为httpcomponents和httpurlconnection编写了一个测试,它们都将3个键值字符串对发布到一个php文件中,php将把这3个字符串组合在一起并返回。 这两个测试在我自己的linux服务器上都可以正常工作,这是一个虚拟机中的DebianLinux。但是,当我将php文件上传到我的网站(由webhostingpad.com托管)时,只有httpcomponents测试有效。httpurlconnection one将获得403禁止作为错误代码 有人暗示我该怎么做吗 这是我的档案:Android httpcomponents和httpurlconnection在我的站点上的工作方式不同,android,httpurlconnection,apache-httpcomponents,Android,Httpurlconnection,Apache Httpcomponents,这是一个非常不寻常的问题。我只是为httpcomponents和httpurlconnection编写了一个测试,它们都将3个键值字符串对发布到一个php文件中,php将把这3个字符串组合在一起并返回。 这两个测试在我自己的linux服务器上都可以正常工作,这是一个虚拟机中的DebianLinux。但是,当我将php文件上传到我的网站(由webhostingpad.com托管)时,只有httpcomponents测试有效。httpurlconnection one将获得403禁止作为错误代码 有
<?php
$s1 = $_POST['s1'];
$s2 = $_POST['s2'];
$s3 = $_POST['s3'];
echo "$s1 $s2$s3";
更奇怪的是,我通过删除解决了这个问题
conn.setChunkedStreamingMode(0);
只需替换代码:
conn.setDoOutput(true);
conn.setChunkedStreamingMode(0);
到
然而在android文档中,有这样的说法
为了获得最佳性能,您应该调用
在中已知主体长度时设置FixedLengthStreamingMode(int)
advance,或设置ChunkedStreamingMode(int)(如果未设置)。否则
HttpURLConnection将被强制缓冲整个请求正文
在传输之前存储在内存中,浪费(可能会耗尽)
堆和增加延迟
因此,如果我这样做,我就失去了好处,如果缓冲区太大,我的应用程序可能会崩溃。知道为什么会这样吗
另外,我注意到在phpinfo()中,apache有一个远程地址,它不是我域的ip,这是问题的原因吗
对于setChunkedStreamingMode,Java文档称之为
启用输出流时,身份验证和重定向
无法自动处理。将抛出HttpRetryException
在读取响应时,如果需要验证或重定向
必修的。可以查询此异常以了解错误的详细信息
所以我需要手动处理重定向。但是,使用来自的代码
我发现我的url没有重定向。所以我想问题不是因为重定向
这就是新问题。我可以删除代码
conn.setChunkedStreamingMode(0)
但这是不推荐的,而且会消耗更多的内存,如果缓冲区太大,可能会导致我的应用程序崩溃
有什么想法吗
=============================================================
我发现,尽管setChunkedStreamingMode()不能在我的案例中使用,但setFixedLengthStreamingMode()工作正常
所以我使用setFixedLengthStreamingMode(),现在一切正常。
仍然想知道为什么setChunkedStreamingMode()在我自己的服务器上工作,但在webhostingpad.com的服务器上却不工作
conn.setDoOutput(true);
conn.setChunkedStreamingMode(0);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
URLConnection con = new URL( url ).openConnection();
System.out.println( "orignal url: " + con.getURL() );
con.connect();
System.out.println( "connected url: " + con.getURL() );
InputStream is = con.getInputStream();
System.out.println( "redirected url: " + con.getURL() );
is.close();
conn.setChunkedStreamingMode(0)