Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android httpcomponents和httpurlconnection在我的站点上的工作方式不同_Android_Httpurlconnection_Apache Httpcomponents - Fatal编程技术网

Android httpcomponents和httpurlconnection在我的站点上的工作方式不同

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禁止作为错误代码 有

这是一个非常不寻常的问题。我只是为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)