`
wasw100
  • 浏览: 127337 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java使用URL类发送Http请求400错误解决

    博客分类:
  • java
阅读更多

文章来自:http://www.codeif.com/topic/389 转载请保留原文地址

 

使用java,但不使用HttpClient等第三方jar包的情况下发送http请求,有时直接在域名后带参数发送请求时会发生400错误,大家可以测试下如下代码

URL url = new URL("http://www.codeif.com?a=3");
InputStream in = url.openStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in, "utf-8"));
String s = null;
while((s=bin.readLine()) != null){
    System.out.println(s);
}
bin.close();

补充:如果你是代理上网,可以参考:java使用代理发送http请求

上面是不是会报400错误,而如果直接访问,不带参数,如下

URL url = new URL("http://www.codeif.com");

则正常返回数据

可是我们访问中需要有参数怎么办呢?
其实解决方案也很简单,在域名后加上/

http://www.codeif.com?a=3

改为

http://www.codeif.com/?a=3

其实之所以我们在浏览器中能够使用http://www.codeif.com?a=3这种形式直接访问,不是说这种方式就是可以访问的,而且浏览器帮你加了/,同样我们的HttpClient包也会帮我们加这个/

这样我们在程序中只需稍微处理下url地址,在后面价格/就可以了

我们写一个函数处理下面的情况
http://www.codeif.com –> http://www.codeif.com
http://www.codeif.com?a=1 –> http://www.codeif.com/?a=1
http://www.codeif.com/topic/360?a=1 不变

可以看出在//后没有/的时候
没有问号的时候在最后加/
有问号的时候在问号前加/

在使用java发送http请求前,可以使用下面的函数对url进行处理

/**
 * 对url进行处理,将url域名后补充/
 * @param url
 * @return
 */
private String handleUrl(String url) {

    String result = url;

    int beginIndex = result.indexOf("//");
    if (beginIndex != -1) {
        int endIndex = result.indexOf("/", beginIndex + 2);
        if (endIndex == -1) {
            int questionIndex = result.indexOf("?");
            if(questionIndex==-1){
                result += "/";
            }else {
                result = result.replaceFirst("/?[?]", "/?");
            }
        }
    }
    return result;
}
文章来自:http://www.codeif.com/topic/389
 转载请保留原文地址
分享到:
评论

相关推荐

    Https请求工具类,Java实现http请求,https请求

    本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...

    通过java.net.URLConnection发送HTTP请求

    总的来说,这篇文章可能涵盖了如何使用Java内置的URLConnection类发送HTTP请求,包括设置请求头、写入请求体、读取响应,并可能涉及了对源代码的分析以及在实际开发环境中(如Spring MVC项目)的应用。

    java发送http请求工具类

    4. **发送请求体**:对于POST请求,需要写入请求体,可以通过`getOutputStream()`获取输出流并写入数据。 ```java try(OutputStream os = connection.getOutputStream()) { os.write(jsonData.getBytes...

    java发送http请求

    1. `java.net.URL`和`HttpURLConnection`类的使用。 2. GET和POST请求的实现。 3. 请求头的设置和使用。 4. 查询参数的处理。 5. 响应内容的读取和编码处理。 6. 连接的关闭和资源管理。 7. 可能会用到的第三方库,...

    java代码发送JSON格式的httpPOST请求

    在Java中,`HttpURLConnection`类是发送HTTP请求最基础且直接的方式。下面将详细解析如何利用`HttpURLConnection`来构建并发送一个包含JSON数据的POST请求: ```java import java.io.BufferedReader; import java....

    使用JAVA原生实现简单的HTTP请求

    在Java编程语言中,发送HTTP请求是常见的网络通信任务,主要用到的是`java.net.URL`和`java.net.HttpURLConnection`这两个核心类。本篇将详细介绍如何使用Java原生API实现简单的HTTP请求。 首先,我们需要了解HTTP...

    java http 发送xml报文(java发送xml报文实例+参数)

    以上就是使用Java HTTP发送XML报文的基本步骤。在实际应用中,可能还需要考虑错误处理、重试机制、超时设置等高级特性。同时,对于大型项目,可能需要使用更高级的HTTP客户端库,如Apache HttpClient或OkHttp,它们...

    Java实现的Https请求工具类

    3. **创建HttpURLConnection对象**:使用`java.net.URL`类打开与目标服务器的连接,并通过`openConnection()`方法获取HttpURLConnection对象。然后,将Socket工厂设置为HTTPS连接的套接字工厂。 ```java URL url = ...

    java发送http/https请求(get/post)Demo,亲测可用

    这里我们将深入探讨如何使用Java发送GET和POST请求,以及处理JSON数据。 首先,让我们关注GET请求。GET请求主要用于从服务器获取资源,其参数通常包含在URL中。在Java中,可以使用`HttpURLConnection`类或者第三方...

    java http 发送xml报文

    - **设置HTTP请求**:使用`URL`对象指向目标服务器的URL,然后通过`openConnection()`方法获取`HttpURLConnection`实例。设置`setDoOutput(true)`表示将有输出流,即向服务器发送数据;`setRequestMethod("POST")`...

    JAVA发送HttpClient请求及接收请求结果过程

    ### JAVA发送HttpClient请求及接收请求结果过程 #### 一、概述 在Java开发过程中,经常需要与外部系统进行HTTP通信,比如发送POST或GET请求来获取数据或提交数据。Apache HttpClient是一个强大的HTTP客户端库,提供...

    java使用HttpClient通过url下载文件到本地

    - **执行请求**:使用HttpClient的`execute()`方法发送请求,并获取`HttpResponse`对象。 - **处理响应**:检查响应状态码,通常200表示成功。然后,通过`EntityUtils`类的`toString()`或`getContent()`方法获取...

    HttpClient发送http请求(post和get)需要的jar包+内符java代码案例+注解详解

    在Java编程中,HttpClient是一个非常重要的工具库,用于发送HTTP请求。这个压缩包可能包含了实现HTTP GET和POST请求所需的jar包以及示例代码,帮助开发者理解如何使用HttpClient进行网络通信。下面将详细介绍...

    JAVA HTTP请求示例

    4. **执行请求**:使用`execute`方法发送请求,并获取`HttpResponse`对象。 ```java HttpResponse response = httpClient.execute(httpGet); ``` 5. **处理响应**:从`HttpResponse`中读取状态码、响应头和响应体...

    java发送http请求并获取状态码的简单实例

    在Java编程中,发送HTTP请求并获取状态码是常见的网络通信任务。HTTP状态码是服务器对客户端请求的响应,它提供了关于请求是否成功、需要进一步操作还是存在错误等信息。以下是一个简单的Java实例,展示了如何实现这...

    java后台请求http并保持Session

    - 使用`java.net.URL`和`java.net.HttpURLConnection`类创建GET请求。首先,构造URL对象,然后打开连接并设置请求方法为GET。如果需要携带Session信息,通常会将Session ID作为Cookie放入请求头中。 ```java URL ...

    使用Java模拟http请求.rar

    发送请求后,可以从响应中获取信息。首先检查响应码: ```java int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // 处理成功 } else { // 处理错误 } ...

    Java实现发送Http请求.doc

    `sendGet` 方法的工作原理是将参数拼接在 URL 后面,形成一个完整的 GET 请求 URL,然后通过 `HttpURLConnection` 连接到该 URL 并发送请求。 **发送 POST 请求** POST 请求通常用于向服务器提交数据,例如表单数据...

    JAVA发送HttpClient请求及接收请求完整代码实例

    在本实例中,我们将深入探讨如何使用HttpClient来发送请求以及处理返回的数据。 首先,让我们了解HttpClient的基本用法。Apache HttpClient库提供了一个`CloseableHttpClient`接口,它是执行HTTP请求的主要入口点。...

    java 使用URL访问网页

    在Java中,还可以使用`HttpURLConnection`类进行更复杂的HTTP操作,比如发送POST请求、设置请求头等。`HttpURLConnection`是`URLConnection`的子类,专门处理HTTP协议。 例如,发送一个POST请求: ```java ...

Global site tag (gtag.js) - Google Analytics