相关疑难解决方法(0)

在Android中获取"SocketException:Connection by peer reset"

我的应用程序需要通过http://127.0.0.1/...(localhost url)联系它正在处理的同一设备.

出于某种原因,当我到达那里有JSON内容的网站时,大约50%的时间(可能正好是50%),我得到例外:

java.net.SocketException:recvfrom失败:ECONNRESET(由对等方重置连接)

对于其他50%,我得到了非常好的结果.我试图进行民意调查(甚至民意调查之间的延迟很大),但我仍然得到同样奇怪的结果.

我搜索过互联网,也在这里,我不确定为什么会这样.对等方是否意味着客户端已经造成了这种情况?为什么会这样,我该如何处理?

一些网站说这是常见的事情,但我没有找到在这种情况下最好的事情.

android localhost socketexception peer

39
推荐指数
2
解决办法
8万
查看次数

JSoup UserAgent,如何设置正确?

我正在尝试解析facebook的首页,JSoup但我总是得到移动设备的HTML代码而不是普通浏览器的版本(在我的情况下是Firefox 5.0).

我正在设置我的用户代理:

doc = Jsoup.connect(url)
      .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      .get();
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

编辑:

我刚刚解析了http://whatsmyuseragent.com/,看起来用户代理正在运行.现在,为什么网站http://www.facebook.com/在使用JSoup和我的浏览器时会返回不同的版本,这让我更加困惑.两者都使用相同的用户....

我现在也注意到了其他一些网站上的这种行为.如果你能向我解释问题是什么,我会非常高兴.

jsoup

36
推荐指数
3
解决办法
5万
查看次数

GZIPInputStream到String

首先,如果我的术语有点业余,我很抱歉,试着忍受我;)

我试图将HTTP响应的gzipped主体转换为明文.我已经采用了这个响应的字节数组并将其转换为ByteArrayInputStream.然后我将其转换为GZIPInputStream.我现在想要读取GZIPInputStream并将最终解压缩的HTTP响应主体存储为纯文本字符串.

此代码将最终解压缩的内容存储在OutputStream中,但我想将内容存储为String:

public static int sChunk = 8192;
ByteArrayInputStream bais = new ByteArrayInputStream(responseBytes);
GZIPInputStream gzis = new GZIPInputStream(bais);
byte[] buffer = new byte[sChunk];
int length;
while ((length = gzis.read(buffer, 0, sChunk)) != -1) {
        out.write(buffer, 0, length);
}
Run Code Online (Sandbox Code Playgroud)

java gzip http gzipinputstream

33
推荐指数
3
解决办法
6万
查看次数

如何在URL中传递多个参数?

我试图弄清楚如何在URL中传递多个参数.我想将我的android类的纬度和经度传递给java servlet.我怎样才能做到这一点?

URL url;
double lat=touchedPoint.getLatitudeE6() / 1E6;
double lon=touchedPoint.getLongitudeE6() / 1E6;
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+lon);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出(写入文件)是28.53438677.472097.这是有效的,但我想在两个单独的参数中传递纬度和经度,以便减少我在服务器端的工作.如果不可能,我怎么能至少在lat和lon之间添加一个空格,以便我可以使用tokenizer类来获取我的纬度和经度.我尝试过以下行,但无济于事.

    url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+" "+lon);
output- Nothing is written to file
        url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"&?param2="+lon);
output- 28.534386 (Only Latitude)
        url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"?param2="+lon);
output- 28.532577?param2=77.502996
Run Code Online (Sandbox Code Playgroud)

我的servlet代码如下:

req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
final String par1 =  req.getParameter("param1");
final String par2 = req.getParameter("param2");
FileWriter fstream = new FileWriter("C:\\Users\\Hitchhiker\\Desktop\\out2.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(par1);
out.append(par2);
out.close();
Run Code Online (Sandbox Code Playgroud)

此外,我想知道这是将数据从Android设备传递到服务器的最安全和最安全的方式.

java url android servlets

32
推荐指数
1
解决办法
32万
查看次数

获取"java.net.ProtocolException:服务器重定向次数太多"错误

我正在使用这样的代码创建一个简单的URL请求:

URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
Run Code Online (Sandbox Code Playgroud)

但是在最后一行,我得到了"重定向太多次错误".如果我的"网页"var是google.com,那么它可以正常工作,但是当我尝试使用我的servlet的URL时,它就失败了.我似乎可以通过以下方式调整重定向后的次数(默认为20):

System.setProperty("http.maxRedirects", "100");
Run Code Online (Sandbox Code Playgroud)

但是当我把它调到100时,它肯定需要更长的时间来抛出错误所以我知道它正在尝试.但是,我的servlet的URL在(任何)浏览器中工作正常,并使用firebug中的"persist"选项,它似乎只重定向一次.

关于我的servlet的更多信息...它在tomcat中运行,并使用'mod-proxy-ajp'在apache前面运行.另外值得注意的是,它使用的是表单身份验证,因此您输入的任何URL都应该将您重定向到登录页面.正如我所说,这在所有浏览器中都能正常工作,但由于某些原因,重定向不适用于Java 6中的URLConnection.

感谢阅读...想法?

java url redirect servlets urlconnection

32
推荐指数
2
解决办法
7万
查看次数

即使httpCon.setRequestMethod("GET"),HttpURLConnection也会发送POST请求; 已设定

这是我的代码:

String addr = "http://172.26.41.18:8080/domain/list";

URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.setRequestMethod("GET");
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");

httpCon.connect();

OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());

System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

out.close();
Run Code Online (Sandbox Code Playgroud)

我在回应中看到了什么:

500服务器错误

我打开我的httpConvar,以及我看到的内容:

POST/rest/platform/domain/list HTTP/1.1

为什么它设置为POST,即使我已经习惯httpCon.setRequestMethod("GET");将其设置为GET?

java http urlconnection

28
推荐指数
1
解决办法
3万
查看次数

如何使用Jsoup通过HTTPS连接?

它在HTTP上运行良好,但是当我尝试使用HTTPS源时,它会抛出以下异常:

10-12 13:22:11.169: WARN/System.err(332): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-12 13:22:11.179: WARN/System.err(332):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:477)
10-12 13:22:11.179: WARN/System.err(332):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:328)
10-12 13:22:11.179: WARN/System.err(332):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.setupSecureSocket(HttpConnection.java:185)
10-12 13:22:11.179: WARN/System.err(332):     at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:433)
10-12 13:22:11.189: WARN/System.err(332):     at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.makeConnection(HttpsURLConnectionImpl.java:378)
10-12 13:22:11.189: WARN/System.err(332):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205)
10-12 13:22:11.189: WARN/System.err(332):     at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:152)
10-12 13:22:11.189: WARN/System.err(332):     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:377)
10-12 13:22:11.189: WARN/System.err(332):     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
10-12 13:22:11.189: WARN/System.err(332):     at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
Run Code Online (Sandbox Code Playgroud)

这是相关的代码:

try {
    doc = Jsoup.connect("https url here").get();
} catch (IOException e) {
    Log.e("sys","coudnt get the html"); …
Run Code Online (Sandbox Code Playgroud)

java https android web-scraping jsoup

23
推荐指数
4
解决办法
4万
查看次数

弃用的HTTP类Android棒棒糖5.1

org.apache.http类和AndroidHttpClient类已经被弃用的Android 5.1.这些类不再被维护,您应该尽快使用这些API将任何应用程序代码迁移到URLConnection类.

https://developer.android.com/about/versions/android-5.1.html#http

它建议切换到URLConnection类.没有足够的文件记录如何从应用程序进行发布呼叫.

目前我正在使用这个

public void postData()
{
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

    try
    {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
     } 
     catch (ClientProtocolException e) 
     {
        // TODO Auto-generated catch block
     } 
     catch (IOException e) 
     {
        // TODO …
Run Code Online (Sandbox Code Playgroud)

android http-post

21
推荐指数
1
解决办法
2万
查看次数

如何使用Java在Http Get方法中设置Cookies

我想用cookies手动GET以下载和解析网页.我需要提取安全令牌,以便在论坛上发帖.我已完成登录,已阅读响应并提取了cookie(3对(名称,值)).然后我写了包含这样的cookie的String:

CookieString="name1=value1; name2=value2; name3=value3"
Run Code Online (Sandbox Code Playgroud)

然后我做以下事情

HttpURLConnection connection
connection = (HttpURLConnection)(new URL(Link).openConnection());
connection.setRequestMethod("GET");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Cookie", CookieString );
connection.connect();
Run Code Online (Sandbox Code Playgroud)

然后我阅读了该页面,但它显示我没有登录论坛.我究竟做错了什么?

编辑:我知道如果我想发帖,我必须提取安全令牌.我的思路是,为了提取它,我需要获取这个特定的页面.但是为了将安全令牌作为隐藏字段,我必须在线,因此我需要cookie.但是,当我获取页面并设置上面提到的cookie时,我将该页面作为访客,它表明我不在线,安全令牌的值是guest,这对我没用.我会检查你给我的链接,希望能找到解决方案.

java cookies forum get http

16
推荐指数
2
解决办法
5万
查看次数

Java http连接

我想设置一个http连接来发送请求并在一个独立的java应用程序中获取响应,任何人都可以帮助我如何继续这个????

java https http

16
推荐指数
1
解决办法
2万
查看次数