Tag: httpurlconnection

Java HttpURLConnection – 使用Cookie进行POST

我正在尝试发送带有cookie的post请求。 这是代码: try { String query = URLEncoder.encode(“key”, “UTF-8”) + “=” + URLEncoder.encode(“value”, “UTF-8”); String cookies = “session_cookie=value”; URL url = new URL(“https://myweb”); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestProperty(“Cookie”, cookies); conn.setRequestMethod(“POST”); conn.setDoInput(true); conn.setDoOutput(true); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(query); out.flush(); out.close(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String decodedString; while ((decodedString = in.readLine()) != null) […]

Java Webstart和URLConnection缓存API

URLConnection缓存API的描述表示为最后一句: Java 2 Standard Edition中没有URLConnection缓存的默认实现。 但是,Java插件和Java WebStart确实提供了一个开箱即用的function。 在哪里可以找到有关Webstart ResponseCache的更多信息? Webstart的哪些版本在哪些平台上激活缓存? 它在哪些情况下是活跃的? 只有HTTP获取? 可以配置吗? 源代码是否可用? 背景: 情况1 使用以下(groovy)代码 def url = new URL(‘http://repo1.maven.org/maven2/’) def connection = url.openConnection() def result = connection.inputStream.text 我希望每次执行代码时都会联系服务器。 但是当执行时 Java Web Start 10.9.2.05 JRE-Version verwenden 1.7.0_09-b05 Java HotSpot(TM) Client VM 行为是不同的。 第一次执行代码时,会联系服务器。 代码的所有后续执行都不涉及与服务器的任何通信(使用wireshark跟踪)。 但它变得更加奇怪。 重新启动webstart应用程序后,第一次执行代码时,请求URL为http://repo1.maven.org/maven2/.pack.gz ,结果为404 。 仅请求原始url导致304 NOT MODIFIED 。 所有后续执行都不涉及与服务器的任何通信。 […]

使用HTTPClient或HttpUrlConnection?

我们正在JRE 1.4上实现REST客户端。 似乎客户端REST框架的两个好选择是HttpClient和HttpUrlConnection 。 是否有理由在JRE的HttpUrlConnection上使用HttpClient?

我可以全局设置HTTP连接的超时吗?

我有一个程序,它使用javax.xml.ws.Service来调用由WSDL定义的远程服务。 此程序在Google App Engine上运行,默认情况下,将HTTP连接超时设置为5秒{1}。 我需要增加此超时值,因为此服务通常需要很长时间才能响应,但由于此请求不是通过URLConnection ,我无法弄清楚如何调用URLConnection.setReadTimeout(int) {2},或以其他方式更改超时。 有没有办法在App Engine上全局设置HTTP连接超时? 而且,为了分享知识,人们将如何解决这类问题呢? {1}: https : //developers.google.com/appengine/docs/java/urlfetch/overview#Requests {2}: http : //docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout(int)

是否可以使用HttpClient下载PDF等文件?

我在这里找到了一些关于如何下载文件的例子,但其中大多数似乎都在使用HttpURLConnection。 是否可以使用HttpClient下载文件?

如何在JAVA中保存来自HTTPSurl的文件?

我正在尝试使用outputstream从URL保存文件。 该URL由https保护。 所以当我尝试获取以下文件时出现了一些错误 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at java.net.URL.openStream(Unknown Source) Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) […]

Android:如何使用HttpsURLConnection以编程方式登录网页

我是Android的新手(也是Java版),如果我的问题是一个基本命题,那就很抱歉! 我必须编写一个Android应用程序,在后台登录到aspx网页,从中获取一些数据,然后从网页注销。 (以编程方式完成所有操作) 基本上,该过程喜欢从Gmail获取电子邮件列表: 1.转到“https://mail.google.com”,然后登录 2.点击“联系人”(==转到“https://mail.google.com/mail/?shva=1&zx=dzi4xmuko5nz#contacts”) 3.使用HttpsURLConnection(或类似的东西)获取页面,并在(例如Map或String)对象中获取电子邮件 4.单击“注销”链接 我希望,这是可以理解的。 看着互联网,我找到了只有“取出部分”的解决方案,所以这不是问题。 但我对“点击部分”一无所知。 …… // Get the connection URL myurl = new URL(“https://mail.google.com”); HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection(); // complete the fields con.setRequestProperty(“Email”,”myacc”); con.setRequestProperty(“Passwd”,”mypass”); /* * in this part, should make sign in, and go directly to contacts… * I don’t have any idea how to do […]

如何将JSON对象流式传输到HttpURLConnection POST请求

我看不出这段代码有什么问题: JSONObject msg; //passed in as a parameter to this method HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); httpCon.setDoOutput(true); httpCon.setDoInput(true); httpCon.setUseCaches(false); httpCon.setRequestProperty( “Content-Type”, “application/json” ); httpCon.setRequestProperty(“Accept”, “application/json”); httpCon.setRequestMethod(“POST”); OutputStream os = httpCon.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, “UTF-8”); msg.write(osw); osw.flush(); osw.close(); os.close(); //probably overkill 在服务器上,我根本没有发布post内容,零长度字符串。

什么可能导致套接字ConnectException:连接超时?

我们有一个Webstart客户端,它通过使用java.net.HttpsURLConnection通过HTTPS发送序列化对象来与服务器通信。 在我的本地机器和办公室的测试服务器上,一切都运行得很好,但我遇到了一个非常非常奇怪的问题,这个问题只发生在我们的生产和登台服务器上(偶尔也会发生)。 我知道这些服务器和我们办公室的服务器之间的主要区别在于它们位于其他地方并且客户端 – 服务器与它们的通信速度相当慢,但在此之前它在生产中也能正常工作。 无论如何,这是发生了什么: 客户端在设置读取超时和HttpURLConnection上的Content-Type等属性之后调用其上的getOutputStream()以获取要写入的流。 此时,据我所知,客户端会挂起一段时间。 然后客户端抛出以下exception: java.net.ConnectException:连接超时:连接 at java.net.PlainSocketImpl.socketConnect(Native Method) 在java.net.PlainSocketImpl.doConnect(未知来源) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 在java.net.PlainSocketImpl.connect(未知来源) 在java.net.SocksSocketImpl.connect(未知来源) 在java.net.Socket.connect(未知来源) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) 在com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(未知来源) 在sun.net.NetworkClient.doConnect(未知来源) 在sun.net.www.http.HttpClient.openServer(未知来源) 在sun.net.www.http.HttpClient.openServer(未知来源) 在sun.net.www.protocol.https.HttpsClient。(未知来源) 在sun.net.www.protocol.https.HttpsClient.New(未知来源) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source) 在sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知来源) 在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知来源) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source) 请注意,这不是SocketTimeoutException , HttpURLConnection上的connect()方法表示如果在建立连接之前超时到期,它将抛出。 此外,当发生这种情况时,我能够调用conn.getResponseCode()并获得200的响应代码。 在服务器端,在ObjectInputStream的构造函数中抛出EOFException ,该构造函数尝试读取序列化头但由于客户端永远不会获取要写入的OutputStream而失败。 如果它有帮助,这里是在调用getOutputStream()之前在HttpsURLConnection进行的调用(编辑后只显示正在进行的调用而不是代码的整个结构这样做): HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setUseCaches(false); conn.setReadTimeout(30000); conn.setRequestProperty(“Cookie”, […]

如果服务器返回错误状态,java.net.HttpUrlConnection是否总是抛出IOException?

我正在使用java.net.HttpUrlConnection向我的服务器发出Http请求。 我意识到如果服务器返回错误状态(例如400)。 HttpUrlConnection将抛出与错误状态对应的IOException。 我的问题是: 如果服务器返回错误状态(4xx,5xx),HttpUrlConnection是否总是抛出IOException? 我看一下HttpUrlConnection API描述,但我无法回答我的问题。 更新:请参阅我的测试: public static void main(String[] args) { try { String url = “https://www.googleapis.com/oauth2/v3/userinfo?access_token=___fake_token”; HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); conn.getResponseCode(); conn.getInputStream(); } catch (Exception ex) { ex.printStackTrace(); // Print IOException: java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.googleapis.com/oauth2/v3/userinfo?access_token=abc // If I commented conn.getResponseCode() -> The same IOException […]