Tag: httpurlconnection

使用HttpURLConnection的HTTP请求不会重用TCP连接

我已经创建了一个将GET请求发送到URL的应用程序,然后下载该页面的完整内容。 客户端向例如stackoverflow.com发送GET,并将响应转发给解析器,该解析器具有从页面中查找需要随后的GET请求下载的所有源的可靠性。 以下方法用于发送这些GET请求。 连续多次调用,解析器返回的URL。 这些URL中的大多数位于同一主机上,并且应该能够共享TCP连接。 public static void sendGetRequestToSubObject(String RecUrl) { URL url = new URL(recUrl.toString()); URLConnection connection = url.openConnection (); InputStreamReader isr = new InputStreamReader(connection.getInputStream()); } 每次调用此方法时,都会创建一个新的TCP连接(使用TCP 3次握手),然后在该连接上发送GET。 但我想重用TCP连接,以提高性能。 我想,因为每次调用方法时我都会创建一个新的URL对象,这就是它的工作方式…… 也许有人可以帮助我以更好的方式做到这一点? 谢谢!

如何使用URLConnection上传二进制文件

为了将二进制文件上传到URL,我建议使用本指南 。 但是,该文件不在目录中,而是存储在MySql db中的BLOB字段中。 BLOB字段在JPA中映射为byte[]属性: byte[] binaryFile; 我稍微修改了从指南中获取的代码,这样: HttpURLConnection connection = (HttpURLConnection ) new URL(url).openConnection(); // set some connection properties OutputStream output = connection.getOutputStream(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), true); // set some headers with writer InputStream file = new ByteArrayInputStream(myEntity.getBinaryFile()); System.out.println(“Size: ” + file.available()); try { byte[] buffer = new byte[4096]; int […]

getRequestProperty(“Authorization”)始终返回null

我正在尝试读取HTTP请求的授权标头(因为我需要向其添加内容),但我总是为标头值获取null。 其他标题工作正常。 public void testAuth() throws MalformedURLException, IOException{ URLConnection request = new URL(“http://google.com”).openConnection(); request.setRequestProperty(“Authorization”, “MyHeader”); request.setRequestProperty(“Stackoverflow”, “anotherHeader”); // works fine assertEquals(“anotherHeader”, request.getRequestProperty(“Stackoverflow”)); // Auth header returns null assertEquals(“MyHeader”, request.getRequestProperty(“Authorization”)); } 难道我做错了什么? 这是一个“安全”function吗? 有没有办法使这个工作与URLConnection,或者我是否需要使用另一个HTTP客户端库?

如何在HttpURLConnection中覆盖http-header“Host”?

我的代码如下: URL url = new URL(“1.0.0.25/otfg/services”); HttpURLConnection cnx = url.openConnection(); cnx.setRequestProperty(“Host”, “example.org”); 但是当我使用tcpdump记录传出包时,http-header“Host”是1.0.0.25。 可能是在发送过程的后期阶段覆盖了http-header“Host”,如果是,我该怎样才能避免这种行为。

Java:在发送之前显示HttpURLConnection的请求

我想使用HttpURLConnection对服务器进行一些API调用。 但请求不成功,返回: 400 Bad Request Unexpected request Content-Type header ”. Expecting ‘application/x-www-form-urlencoded’. 所以我想检查发送到服务器的“真实”内容是什么。 通过真实内容我的意思是确切的HTTP请求。 我有什么想法可以看到这个吗? 编辑:基于这里的第一个答案我应该澄清我的问题:我想避免使用像HTTP嗅探器或任何东西的外部程序,我希望有一个function或属性或任何持有我正在寻找的信息。 如果不是这样,有人知道是否可以手动重建此信息(例如通过调用getRequestMethod()等几个函数) 我经常遇到这个问题,所以我自己也要努力建立这样的function。 只需知道如何:)

当我调用connect()时,Java HttpURLConnection无法连接

我正在尝试编写一个程序来对我的webapp进行自动化测试。 为此,我使用HttpURLConnection打开连接。 我正在尝试测试的其中一个页面执行302重定向。 我的测试代码如下所示: URL currentUrl = new URL(urlToSend); HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection(); connection.connect(); system.out.println(connection.getURL().toString()); 所以,假设urlToSend是http://www.foo.com/bar.jsp ,并且该页面将您重定向到http://www.foo.com/quux.jsp 。 我的println语句应该打印出来http://www.foo.com/quux.jsp ,对吗? 错误。 重定向永远不会发生,并打印出原始URL。 但是,如果我通过调用connection.getResponseCode()更改切换出connection.connect()行,它就会神奇地起作用。 URL currentUrl = new URL(urlToSend); HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection(); //connection.connect(); connection.getResponseCode(); system.out.println(connection.getURL().toString()); 为什么我看到这种行为? 我做错了吗? 谢谢您的帮助。

URLConnection没有得到字符集

我正在使用URL.openConnection()从服务器下载内容。 服务器说 Content-Type: text/plain; charset=utf-8 但是connection.getContentEncoding()返回null 。 怎么了?

如何阅读HttpURLConnection的完整回复?

我在andorid中创建一些修改http标头的代理服务器,它工作正常,但我必须将完整响应转发到’顶层’。 我如何从HttpURLConnection读取整个响应(所有标题,内容,所有内容)? HttpURLConnection httpURLConnection; URL url = new URL(ADDRESS); httpURLConnection = (HttpURLConnection) url.openConnection(); // add headers, write output stream, flush if (httpURLConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) { Map<String, List> map = httpURLConnection.getHeaderFields(); System.out.println(“Printing Response Header…\n”); for (Map.Entry<String, List> entry : map.entrySet()) { System.out.println(“Key : ” + entry.getKey() + ” ,Value : ” + entry.getValue()); } return new […]

应该与CookieManager的HttpURLConnection自动处理会话cookie吗?

我有一个Java应用程序(JDK 1.7.0_13),并使用java.net.HttpURLConnection连接到一些基于servlet的服务进行会话管理。 我试图弄清楚如何使用java.net.CookieManager来跟踪会话cookie。 阅读文档我得到的印象是使用CookieHandler.setDefault(新的CookieManager())安装CookieManager会导致cookie管理自动发生。 但是,对同一URL的多个请求似乎不会保留cookie。 我是否必须手动从响应中提取cookie并在我自己的请求中重新发送它们,或者CookieManager是否会自动为我执行此操作? 如果CookieManager没有,那么它添加了什么值? 为了测试一些东西,我有一个servlet,每当我的浏览器访问一个URL时,它就会成功递增一个计数器。 这可以在Safari,FireFox和Chrome中正常工作……但是,我无法从独立的Java应用程序中使用它。 这是一个非常简单的测试程序,用于说明我希望简单的工作。 它在开始时安装CookieManager,然后在控制台输入URL时重复调用fetch(String urlString)方法。 package com.brilliant.experimental; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.CookieHandler; import java.net.CookieManager; import java.net.HttpURLConnection; import java.net.URL; public class HttpFetcher { public static void fetch(String urlString) { try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); InputStream in = conn.getInputStream(); […]

如何从HttpClient切换到HttpUrlConnection?

我正在创建一个Android应用程序,我通过HttpClient将数据从Android应用程序发送到servlet。 我使用HttpPost方法。 我在Android开发者网站上看到Apache HttpClient库在Android Froyo 2.2中有一些错误,毕竟使用HttpUrlConnection代替HttpPost是一个好习惯。 所以我想将我的HttpPost代码转换为HttpUrlConnectio,但不知道如何。 我在这里发布我的Android代码以及servlet代码 Android代码 private String postData(String valueIWantToSend[]) { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); try { List nameValuePairs = new ArrayList(); nameValuePairs.add(new BasicNameValuePair(“param1”,valueIWantToSend[0])); nameValuePairs.add(new BasicNameValuePair(“param2”, valueIWantToSend[1])); nameValuePairs.add(new BasicNameValuePair(“param3”, valueIWantToSend[2])); nameValuePairs.add(new BasicNameValuePair(“param4”, valueIWantToSend[3])); nameValuePairs.add(new BasicNameValuePair(“param5”, valueIWantToSend[4])); nameValuePairs.add(new BasicNameValuePair(“param6”, […]