java.io.IOException: Server returned HTTP response code: 400 for URL: http://xxxx

这篇具有很好参考价值的文章主要介绍了java.io.IOException: Server returned HTTP response code: 400 for URL: http://xxxx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初识篇

1.0介绍

1.1自我介绍

大家好,我是IT摆烂工程师,今天正式在博客上发布文章,请大家多多支持!!!

1.2写csdn博客初衷

原因是记录一些关于java的编程知识,在工作中的一些困难点,博主也是编程菜鸟,希望在探索的过程中一步步变“秃”,最重要的是记录自己的成长历程。

接下来就开始本篇博客的主要内容了

2.0对接接口

2.1java.io.IOException: Server returned HTTP response code: 400 for URL: http://xxxx

以上错误是对接接口常见的错误,是怎么形成的呢,菜鸟博主也是不太会,所以记录一下。

2.2解决

可能出现错误的原因

  1. 可能是没有做字符转义
  2. 可能是没有了解完全第三方接口
  3. ........

2.2.1第一种错误,解决代码如下

UrlUtil.sendGetHttpUrlUrlUtil.sendGetHttpUrlURLEncoder.encode("张三 =","UTF-8")    //调用端
    @GetMapping("/doGetLogin")
    public Map<String, Object> doGetLogin() throws IOException {
        System.out.println("调用方");
        String urlstr="name=张三 =&pwd=123456=";  //请注意张三后面有一个空格
        String newUrl="http://127.0.0.1:7777/user/login"+"?"+urlstr;
        String str = UrlUtil.sendGetHttpUrl(newUrl,"token"); //工具包网上有
        Map map = JSONObject.parseObject(str, Map.class); //引入fastjson依赖
        return map;
    }
    @GetMapping("/doGetLogin2")
    public Map<String, Object> doGetLogin2() throws IOException {
        System.out.println("调用方");
        String urlstr ="name="+ URLEncoder.encode("张三 =","UTF-8")+"&pwd="+URLEncoder.encode("123456=","UTF-8");
        String newUrl="http://127.0.0.1:7777/user/login"+"?"+urlstr;
        String str = UrlUtil.sendGetHttpUrl(newUrl,"token");
        Map map = JSONObject.parseObject(str, Map.class);
        return map;
    }
    
    //第三方接口端
    @GetMapping("/login")
    public R login(@RequestParam(required = false) Map<String, Object> map, HttpServletRequest request) throws UnsupportedEncodingException {
        System.out.println("模拟第三方接口");
        System.out.println(map.toString());
        System.out.println(request.getQueryString());
        System.out.println(request.getHeader("Authorization")); //获取token
        if (map.get("name") != null && map.get("pwd") !=null) {
            if (map.get("name").equals("张三 =") && map.get("pwd").equals("123456=")) {
                return R.ok();
            }
            return R.error("账号和密码输入不正确");
        }else {
            return R.error("账号和密码不能为空");
        }
    }

注意:

  1. 使用第一种方法会报错,因为有空格字符,没有进行转义,所以会报错误

    java.io.IOException: Server returned HTTP response code: 400 for URL: http://127.0.0.1:7777/user/login?name=张三 =&pwd=123456=
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0]
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0]
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0]
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:408) ~[na:1.8.0]
    	at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1888) ~[na:1.8.0]
    	at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1883) ~[na:1.8.0]
    	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0]
    	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1882) ~[na:1.8.0]
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1455) ~[na:1.8.0]
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439) ~[na:1.8.0]

    最主要的是name=张三 =&pwd=123456=,没有进行转义

  2. 使用第二种方式进行调用就不会出现错误

    name=%E5%BC%A0%E4%B8%89+%3D&pwd=123456%3D
    原因是张三 =转义成%E5%BC%A0%E4%B8%89+%3D这个字符串了,可以进行http请求调用 空格转为+号了,最主要的空格出现在url中会破坏这个http请求路径,所有要进行转义。

  3. URLEncoder.encode("张三 =","UTF-8") --java.net.URLEncoder

    可以进行对"张三 ="这个字符串转义成 %E5%BC%A0%E4%B8%89+%3D
  4. 服务器应该是给url做了处理,所以不需要自己手动进行url路径转义回来,但也可以手动进行转义

    System.out.println(URLDecoder.decode("转义过后的字符串(%E5%BC%A0%E4%B8%89+%3D)", "UTF-8"));

    可能有工具类封装了,但是博主没找^_^

  5. 最后附上我的--UrlUtil.sendGetHttpUrl

    /**
     * get请求
     * @param url 请求地址
     * @param token 请求头携带的token
     * @return 返回第三方接口的返回信息(一般是code,data等数据)
     * @throws IOException
     */
    public static String sendGetHttpUrl(String url,String token) throws IOException {
        URL realUrl= new URL(url);
        URLConnection connection=realUrl.openConnection();
        //设置请求超时
        connection.setConnectTimeout(6000);
        //设置通用的请求属性头
        connection.setRequestProperty("accept","*/*");
        connection.setRequestProperty("connection","Keep-Alive");
        connection.setRequestProperty("user-agent","Mozilla/4.0(compatiable;MSIE 6.0; Windows NT 5.1; sv1)");
        if (token != null) {
            connection.setRequestProperty("Authorization",token);
        }
        connection.connect();
        //设置响应超时
        connection.setReadTimeout(6000);
        //获取所有响应头字段
        Map<String, List<String>> map= connection.getHeaderFields();
        for(String key :map.keySet()){

        }
        //定义bufferedReader字符流读取URL的响应
        BufferedReader bred=new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line="";
        String str="";
        while((line=bred.readLine()) !=null){
            str+=line;
        }
        System.out.println(str);
        //关闭 流
        bred.close();
        return str;
    }

2.2.2第二种错误--不了解第三方接口

  1. 这个博主就无能为力了

    只能说是多看多学多写多问

  2. 如果是官方的接口,可以去开放平台找接口文档

2.2.3其他的就不知道咯,如果有也可以留言,一起研究共同进步!!

最后在这里谢谢大家的浏览。祝大家工作顺利,准时下班!!!!文章来源地址https://www.toymoban.com/news/detail-554473.html

到了这里,关于java.io.IOException: Server returned HTTP response code: 400 for URL: http://xxxx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Minio出现Non-XML response from server. Response code: 400, Content-Type: text/xml; ch的解决

    出现这个问题,基本原因的是因为你的minio的配置出现了错误。 这里要注意,要使用的是Minio启动的时候人家给你的端口和用户名以及密码 然后再去配置Minio的client 然后编写代码的时候先尝试访问桶,能访问到桶在进行接下来的步骤 然后发送请求做一个测试即可

    2024年02月11日
    浏览(39)
  • Selenium 问题 java.io.IOException: Invalid Status code=403 text=Forbidden

    0. 异常信息 1. 增加启动参数   微笑的java 欢迎关注转发评论点赞沟通,让编码不在孤单。

    2024年02月11日
    浏览(41)
  • java selenium问题解决,版本号对应,仍报错java.io.IOException: Invalid Status code=403 text=Forbidden

    报错截图 java.io.IOException: Invalid Status code=403 text=Forbidden Exception in thread \\\"main\\\" org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://localhost:60613/devtools/browser/747cc62c-8bb8-4828-ab4e-afa69400a604 Build info: version: \\\'4.1.2\\\', revision: \\\'9a5a329c5a\\\' System info: host: \\\'LAPTOP-

    2024年02月11日
    浏览(44)
  • HTTP接口调用时报错 java.io.IOException: Connection reset by peer解决办法

    在接口调用时,遇到如下报错: Caused by: java.io.IOException: Connection reset by peer         at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_241]         at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_241]         at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_241]  

    2024年04月26日
    浏览(49)
  • Unable to tunnel through proxy. Proxy returns “HTTP/1.1 400 Bad request

    今天通过nginx代理下载pdf报这个错,网上查了很多资料,说的大部分都是Android studio这个的解决办法,几乎没有针对nginx的处理,部分说是需要配hosts,配了hosts也没用,有一些说是要增加proxy_set_header Host $http_host;这个配置,也不能解决我的问题,这边记录一下针对我这边出现问

    2024年02月12日
    浏览(36)
  • 【方案探讨】 出现java.io.IOException解决方法

    欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。 每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案

    2024年04月25日
    浏览(38)
  • java.io.IOException: Broken pipe管道断开

    一、Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常! 3.端口冲突,地址已被使用,也会导致Broken pipe 二、方案 1.问题一分析服务器为什么挂了。 2.问题二使用jp

    2024年02月10日
    浏览(36)
  • 上传文件提示java.io.IOException: java.io.FileNotFoundException:(系统找不到指定的路径。)

    关键信息: java.io.IOException: java.io.FileNotFoundException: C:UsersbrendonAppDataLocalTemptomcat.6510816303036534023.8099workTomcatlocalhostROOTinvoiceoriginalfile2023-02-1373432e18330dec9a05af2e74d068bfba83e0a88d.pdf (系统找不到指定的路径。) Caused by: java.io.FileNotFoundException: C:UsersbrendonAppDataLocalTemptomcat

    2024年02月12日
    浏览(30)
  • Http: server gave HTTP response to HTTPS client 解决方法

    如果没有 /etc/docker/daemon.json 这个文件,可以自己新建一个 情况1.这种写法是没有配置Docker加速器的情况下 在 /etc/docker/daemon.json 中设置以下: // 单个私服的写法 {     \\\"insecure-registries\\\": [\\\"registry的IP地址:端口号\\\"] } // 多个私服的写法 {     \\\"insecure-registries\\\": [\\\"registry1的IP地址

    2024年02月03日
    浏览(28)
  • java.io.IOException: Connection reset by peer

    接口返回的时候报错,java.io.IOException: Connection reset by peer,具体报错信息如下: 原因: 接口返回的数据量太大报错, 解决办法: 修改nginx缓存配置信息。 nginx原配置信息: nginx修改后信息: 注意: \\\"proxy_busy_buffers_size\\\"必须等于或大于\\\"proxy_buffer_size\\\"的最大值。

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包