程序访问一个地址时候报400错误,浏览器访问正常怎么解决

?

最近凯哥在调凯哥优惠淘公众号(领取优惠券的公众号)的时候,发现以前好好的程序,突然不能用了。于是就本地断点,发现了如下错误:

?

程序通过httpClient访问一个地址的时候,提示:server returned HTTP Response code :400 fro URL:XXXX这个错误。不对啊,以前的没问题现在怎么就突然有问题了?而且将程序访问的url地址放到浏览器中就可以正常访问的。为什么在程序中就访问不了呢?

于是就把访问的URL 复制下来,一个一个对比,发现,原来,程序访问出错的url中有中文。怀疑是不是因为中文没有进行URL编码导致【ps:最后得到的结论确实是中文没有URL编码】?

Jave中对URL进行url编码,大家都知道,就是URLEncoder.encode()这个方法。简单啊!该就是呗。于是凯哥就把整个URL进行encode.结果大家可想而知,把http://xxx 中的://也进行了encode.通过httpclient当然访问不了的。

程序

访问前的URL:xxx?name=凯哥==>结果访问失败

修改后的URL:xxx?name=URLEncoder.encode("凯哥","utf8")==>访问成功

于是凯哥就修改编码方式,只对中文部分的参数进行encode.修改之后,程序就正常访问成功了。

总结:

如果程序访问一个url出现server returned HTTP Response code :400 fro URL这个错误,但是在浏览器中访问同样的url没问题的话,就要考虑是不是因为访问的url中有特殊字符。如空格、逗号、中文等。把这些特殊字符进行url编码后在使用程序进行访问或许就能成功了。需要注意,在进行url编码的时候,指定编码的字符集

原文地址:https://www.cnblogs.com/kaigejava/p/12150453.html

时间: 2024-11-05 12:07:02

程序访问一个地址时候报400错误,浏览器访问正常怎么解决的相关文章

原生Ajax报400错误

原生ajax报400错误,网上一般说参数错误..看着老是误以为是参数名写错了 但是我遇到的错误不是这个原因. 后台配置的spring,然后前端我想用原生的ajax用提交数据:接收参数的时候我是直接用一个java对象接收的 public class Plan { private int planId; private int fatherPlanId; private String fatherPlanName; private String planName; private int task;

Yii2请求,报400错误

出现400错误是yii2.0的csrf防范策略导致 在components里面添加request配置如下: 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValid

eclipse启动tomcat 访问http://localhost:8080 报404错误

eclipse启动tomcat 访问http://localhost:8080 报404错误 Server Locations修改后会变灰,如果需要更改设置,则需要移除与Tomcat服务器关联的项目,同时,鼠标右键菜单Clean清除Tomcat服务器的状态^^就可以修改了.

SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User { 4 5 private int userId; 6 private String userName; 7 private Date createDate; 8 9 public

IDEA找不到程序包 和 request.getServletContext()报错Cannot resolve method 'getServletContext()的解决方法

重新装了idea和down了项目却一直报错,在调用request.getServletContext()的方法时一直报Cannot resolve method 'getServletContext()的错误,网上查了好多方法,大多数都是在说是servlet3.0才可以支持此方法,而servlet3.0只有tomcat7以上版本才可以,我检查了我自己的tomcat发现就是3.0,最终找到原因 对于Maven项目要检查pom文件中的servlet引入的是哪个包,我原来写的是这个 <dependen

(转)从浏览器访问一个地址的过程

1.若DNS缓存中没有相关数据,则IE浏览器先向DNS服务器发出DNS请求: 这一过程的目的是获取www.sina.com这个域名所对应的IP地址: IE浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文: DNS模块将生成的DNS报文传递给传输层的UDP协议单元: UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元: IP协议单元将该数据封装成IP数据包,其中目的IP地址为DNS服务器的IP地址: 封装好的IP数据包将传递给数据链路层的协议单元进行发送: 发

Unable to verify your data submission.加入了_csrf也报400错误的解决

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->csrfToken?>" />如果你添加了以上标签还是报错那么你需要坚持看完这篇文档 刚开始做Yii2开发的程序猿基本上都遇到过这个错误,因为在程序设计中避免不了的要向服务器提交数据,那就需要使用到表单.其实这个错误的提示很明确的其中文错误就是提交的数据验证不通过.我们下来分析导致这个

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法

系统:WIN7 数据库:mysql 开发工具:Eclipse 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 . 在controller使用对象来接收前台页面的date数据类型时报400错误 下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date

java springMVC 报400错误问题

java springMVC 中如果报400错误 很有可能是因为时间转换的问题. 我在项目中就遇到了这个问题,是因为我少引用了一个库,如果是因为时间问题的话添加以下依赖就可以解决. 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-time</artifactId> 4 <version>1.3</version> 5 </depende