Tag: httpurlconnection

如何在java中处理阿拉伯语

我需要将一串阿拉伯值传递给HttpURL作为参数但在我说我打印消息之前它只显示问号 public void sendSms(SendSms object) throws MalformedURLException,ProtocolException,IOException { String message=new String(object.getMessage().getBytes(), “UTF-8”); System.out.println(message);//printing only question marks } 甚至当我发送消息作为url参数时,它不发送原始消息作为阿拉伯语发送问号。 public void sendSms(SendSms object) throws MalformedURLException, ProtocolException,IOException { String message=new String(object.getMessage().getBytes(), “UTF-8”); System.out.println(message); PrintStream out = new PrintStream(System.out, true, “UTF-8″); out.print(message); String charset=”UTF-8”; URL url = new URL(“http://62.215.226.164/fccsms_P.aspx”); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestProperty(“Accept-Charset”, charset); con.setRequestMethod(“POST”); //con.setRequestProperty(“User-Agent”, […]

Java – 通过POST方法轻松发送HTTP参数

我成功地使用此代码通过GET方法发送带有一些参数的HTTP请求 void sendRequest(String request) { // ie: request = “http://example.com/index.php?param1=a&param2=b&param3=c”; URL url = new URL(request); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod(“GET”); connection.setRequestProperty(“Content-Type”, “text/plain”); connection.setRequestProperty(“charset”, “utf-8”); connection.connect(); } 现在我可能需要通过POST方法发送参数(即param1,param2,param3),因为它们非常长。 我想在该方法中添加一个额外的参数(即String httpMethod)。 如何通过GET或POST尽可能少地更改上面的代码? 我希望改变 connection.setRequestMethod(“GET”); 至 connection.setRequestMethod(“POST”); 本来可以做到的,但参数仍然是通过GET方法发送的。 HttpURLConnection有没有任何方法可以提供帮助? 有没有有用的Java构造? 任何帮助将非常感谢。

使用Java URLConnection进行Cookie管理

我对Android编程很新,最近获得了成功的HTTP Post请求,只是为了得知我的cookie没有存储在后续的Post / Get请求之间。 我浏览了一下interweb,并找到了Android的Apache客户端和Java的HttpURLConnection的几个例子。 我没有成功地将这两种方法应用到我当前的课程中,所以我想知道有经验的人是否可以查看我的代码并提供建议。 概括: 我的初始POST请求成功并经过身份validation。 我的第二个POST请求不会保留初始POST请求中的cookie。 是否有人为可能选择Apache方法或Java实现的具体实例或原因? 两者都是平等的,还是一个提供比另一个更多的能力和灵活性? 感谢任何帮助,谢谢。 webCreate.java import android.util.Log; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.CookieHandler; import java.net.CookieManager; import java.net.HttpCookie; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class webCreate { private final String USER_AGENT = “Mozilla/5.0”; // HTTP GET request public void sendGet(String url) throws Exception { CookieManager […]

如何使用HttpURLConnection在Java中等待Expect 100-continue响应

我被困在使用HttpURLConnection向Web服务器发出PUT http请求。 我有一些代码可以使PUT请求很好,我可以在标题中包含’期望100-继续请求属性’然后尝试我可能似乎无法让函数等待’100继续’在发送实际的http有效负载之前从服务器响应。 我得到以下(来自Wireshark) PUT /post/ HTTP/1.1 User-Agent: curl/7.35.0 Accept: */* Content-Type: application/x-www-form-urlencoded Expect: 100-continue Host: somerandomdomain.info Connection: keep-alive Content-Length: 17 Some data for you HTTP/1.1 100 Continue …rest of web-server response… 我确定我错过了一些明显的东西然而在谷歌搜索后我画了一个空白 – 有人可以帮忙吗? 非常感谢如果:) 下面的Http PUT代码片段: String url = “http://somerandomdomain.info”; String postJsonData = “Some data for you\n”; URL obj = new URL(url); HttpURLConnection […]

使用HttpClient模拟HTTP POST的问题

我正在尝试使用HttpClient以编程方式将HTTP Post请求发送到http://ojp.nationalrail.co.uk/en/s/planjourney/query,但它并不喜欢我发送它的请求。 我从Chrome浏览器发送的内容中复制了标题和正文,因此它完全相同,但它不像我发送的内容,因为HTML提到有错误。 Sorry, something went wrong There is a problem with the page you are trying to access. It is possible that it was either moved, it doesn’t exist or we are experiencing some technical difficulties. We are sorry for the inconvenience. 这是我使用HttpClient的Java程序: package com.tixsnif; import org.apache.http.*; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import […]

如何杀死BufferedInputStream .read()调用

我正在编写一个程序来从服务器下载非常大的文件(~2GB)。 我编写了程序以便能够恢复部分完成的下载, 为了模拟一个糟糕的互联网连接,我一直在下载中途时将我的以太网线从我的路由器中拉出来。 不幸的是,这导致我的程序挂起以下调用: while((bytesRead = in.read(data)) > 0) (其中bytesRead是int,in是从HttpURLConnection构建的BufferedInputStream,数据是字节数组)。 我试图通过在另一个线程上调用in.close()来“中断”调用,但是在恢复互联网连接之前它没有任何效果(此时会抛出exception)。 有什么方法可以阻止被切断的互联网连接冻结我的程序吗?

下载时限制带宽

我有一个可以使用互联网连接下载数据的应用程序。 我正在使用HttpURLConnection来做到这一点。 问题:我的应用程序消耗了互联网带宽,因此用户将在浏览器上慢慢浏览。 我想让他们自己设置带宽限制,而不是像这个站点 。 我已经知道了。 问题:下载时如何设置带宽限制? 例如:500 KB / s(每秒KiloBytes)。 这是我下载文件的方法: // These are the status codes. public static final int DOWNLOADING = 0; public static final int PAUSED = 1; public static final int COMPLETE = 2; public static final int CANCELLED = 3; public static final int ERROR = 4; private long […]

validationCXF HttpAsyncClient使用use.async.http.conduit上下文属性

我正在尝试使用CXF异步HTTP客户端传输,通过设置“use.async.http.conduit”属性, 如此线程中所详述,并由此CXF文章推荐。 我使用以下代码执行此操作: Client client = ClientProxy.getClient(wsClient); client.getRequestContext().put(“use.async.http.conduit”, Boolean.TRUE); 碰巧,我的Web服务调用超时(可能是由于某些环境网络问题),我的客户端exception包含(提取): java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:698) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:641) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1218) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.getResponseCode(URLConnectionHTTPConduit.java:260) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1513) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1486) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1305) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623) 上面的exception堆栈表明java.net.HttpURLConnection类仍在使用,并且基于CXF文档,该设置尚未生效。 我想弄清楚的是如何确保“use.async.http.conduit”生效,即是否存在可以测试的特定行为,或者我可以在客户端上启用的特定日志配置毫无疑问会告诉我Apache HttpAsyncClient正在使用中吗? 非常感谢 :)

最大内容长度?

我正在尝试使用HttpURLConnection连接服务器,但我的PUT方法有问题。 我需要发送一个包含1500个字符 (或更多)的字符串,但在这种情况下,服务器会产生超时并返回500 – 服务器内部错误 。 如果我发送一个低于1400个字符的字符串,我没有问题,服务器返回OK 。 我的代码如下: public String connectToServer(String prototype) { String responseString = “”; try { BufferedReader in = new BufferedReader(new InputStreamReader(openURLForInput(new URL(URL), USERNAME, PASSWORD, prototype))); String line; while ((line = in.readLine()) != null) { System.out.println(line); responseString += line; } } catch (IOException e) { e.printStackTrace(); responseString = e.toString(); } return […]

在响应完成之前关闭HttpURLConnection

背景 我在客户端使用HttpURLConnection在HTTP流(服务器推送)情况下使用响应。 虽然服务器可以通过关闭响应来关闭连接,但客户端也需要能够执行此操作。 问题 客户端在单独的线程中处理InputStream ,如下所示: @Override public void run() { try { for (int b = in.read(); b >= 0; b = in.read()) { char c = (char) b; // Do something with the character // … } } catch (IOException e) { } } 因此,当我从发起连接的线程调用HttpURLConnection.disconnect() (重要的信息是它与处理输入的线程不同),该调用将无限期挂起。 我甚至一夜之间离开了它,它仍然悬挂着。 即使调用Thread.interrupt()也无济于事。 建议?