- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景:我需要访问 HTTPS URL 来获取 .csv 文件或其内容。我可以在 Chrome 浏览器中使用高级 REST 客户端插件成功获取所需的内容。但是在尝试使用 java 代码执行相同操作时会得到一个垃圾值。
代码:
public class AnotherBean {
private final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36";
public void printAnotherMessage() {
System.out.println("I am called by Quartz jobBean using CronTriggerFactoryBean");
AnotherBean anotherBean = new AnotherBean();
try {
System.out.println("Testing 1 - Send Http GET request");
anotherBean.sendGet();
// System.out.println("\nTesting 2 - Send Http POST request");
// anotherBean.sendPost();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// HTTP GET request
private void sendGet() throws Exception {
String url = "https://xxx.xxx.com/xxxx/DownloadReport/2015/10/29/xxx/TransactionDetailReport.csv";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
// add request header
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
con.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
con.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch");
String urlParameters = "username=xxxx&password=xxxx";
con.setDoOutput(true);
con.setDoInput(true);
OutputStream wr = con.getOutputStream();
// wr.writeBytes(urlParameters);
wr.write(urlParameters.getBytes("UTF-8"));
wr.flush();
wr.close();
// con.connect();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
System.out.println("Post parameters : " + urlParameters);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
System.out.println("Response: " + response.toString());
System.out
.println("Content Encoding: " + con.getContentEncoding() + "\nContent Length: " + con.getContentLength()
+ "\nContent Type: " + con.getContentType() + "\nContent: " + con.getContent());
}
// HTTP POST request
private void sendPost() throws Exception {
String url = "https://xxx.xxx.com/xxxx/DownloadReport/2015/10/29/xxx/TransactionDetailReport.csv";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
// add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
con.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
con.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch");
String urlParameters = "username=xxx&password=xxxx";
// String urlParameters = "{" +
// "\"username\":\"xxxx\",\"password\":\"xxxx\"" +
// "}";
// Send post request
con.setDoOutput(true);
con.setDoInput(true);
// DataOutputStream wr = new DataOutputStream(con.getOutputStream());
OutputStream wr = con.getOutputStream();
// wr.writeBytes(urlParameters);
wr.write(urlParameters.getBytes("UTF-8"));
wr.flush();
wr.close();
// con.connect();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
// BufferedReader inputReader = new BufferedReader(new
// InputStreamReader((InputStream) con.getContent()));
// String theString = IOUtils.toString(con.getInputStream(),
// StandardCharsets.UTF_16BE);
// byte[] byteArray = IOUtils.toByteArray(con.getInputStream());
// String theString = IOUtils.toString(byteArray);
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
// System.out.println(" " + inputLine);
}
/*
* do { inputLine = inputReader.readLine(); response.append(inputLine +
* "\n"); } while (inputLine != null);
*/
// String finalResponse = new String(response, StandardCharsets.UTF_8);
// inputReader.close();
// print result
System.out.println("Response: " + response.toString());
// System.out.println("Response - theString: " + theString);
// System.out.println("Response String: " + byteArray);
System.out
.println("Content Encoding: " + con.getContentEncoding() + "\nContent Length: " + con.getContentLength()
+ "\nContent Type: " + con.getContentType() + "\nContent: " + con.getContent());
}
}
**Response:**
***Sending 'GET' request to URL :*** "https://xxx.xxx.com/xxxx/DownloadReport/2015/10/29/xxx/TransactionDetailReport.csv";
***Response Code :*** 200
***Post parameters :*** username=xxxx&password=xxxx
***Response:*** ‹ •UmoÓ0þÞ_aR!©YÓn¬Í"¡2H›?ø„.ñ%1sâ`;[â¿syiצÍ`NU;ñùîžçÎwþ‹wŸ—·ß¾\³Ôf2ø› ?F÷ÂJfžÇ\vƒú5»ÖZiÜì4RZ`QÚ ½rJ»oœvËØõF¬•ö{ûZ?¢»D«2çs–«™ÆÁ2i%%óè^×c±=÷g°]†Š¯;3ЉÈçlòºXÑéɬX-öb•[7†LÈõœ9ŸÊHp`4ä?»…Te0boµ ......
***Content Encoding:*** gzip
***Content Length:*** 761
***Content Type:*** text/html
***Content:*** sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@7c4ccb2f
即使使用 POST 方法,我也得到相同的响应。谁能告诉我哪里错了或者需要纠正什么。
提前致谢。
更新:根据 @Hendrik Simon 的回复,我可以得到可读格式的回复。但现在我面临另一个障碍。现在的响应是
Response: <!DOCTYPE html><html><head> <title>500 - Server Error</title> <meta charset="utf-8"> <style> html { background: none repeat scroll 0 0 #EEEEEE; } body { margin: 17px 0 15px; font-family: "Lucida Grande", Tahoma, Arial, Verdana, sans-serif; padding: 0; text-align: center; font-size: small; } #content { display: block; margin: 20px 14px 10px; padding: 0 0 20px; position: relative; } #container { background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #CCCCCC; box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); text-align: left; margin: 0 auto; width: 640px; min-height: 200px; } h2 { font-size: 160%; clear: left; font-weight: 400; margin: 0 0 5px; text-align: left; } #content div { color: #555555; font-size: 95%; line-height: 135%; } #logo { background-color: #003C69; background-image: none; margin: 0; min-height: 0; padding: 0; text-decoration: none; text-indent: -9000px; } #logo a { background-repeat: no-repeat; background-image: url("cybersource_logo.gif"); height: 55px; min-height: 0; display: block; overflow: hidden; } </style></head><body><div id="container"> <h1 id="logo"><a>CyberSource</a></h1> <div id="content"> <h2>The server encountered an error and could not complete your request.</h2> <br/> <div>If the problem persists please report your problem.</div> </div></div><script src="ntpagetag.js"></script></body></html>
当我在浏览器或 REST 客户端上使用相同的 URL 时,通常会出现一个弹出窗口来输入凭据。成功提交后,我得到了所需的数据。谁能指导我如何使用 JAVA 代码处理这种情况?
最佳答案
似乎响应是 gzip 编码的,并且您没有解压缩它。
尝试删除以下行
con.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch");
更新:
正如 @RealSkeptic 正确提到的,如果它是 GET
请求,则无法将数据写入连接。对于 GET 请求,您必须将参数添加到 URL,如下所示:
http://...?param1=bla¶m2=blubb
我认为,只要您调用 con.setDoOutput(true);
您的连接就会自动执行 POST 请求,无论您设置什么请求方法。因此,在您的示例中,您永远不会发出 GET 请求。
例如,当您使用 Wireshark 分析流量时,您可以轻松看到这一点。
对于服务器错误,如果不重现它,就很难分析它。在不知道 URL 的情况下重新生成它是不可能的,至少对我来说是这样。
关于java - JAVA 中 HttpURLConnection 的响应产生垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654049/
我正在尝试检查 Entry 中是否存在重复项,并使用内联消息提醒用户该数字存在。 $(document).ready(function(){ $("#con1").blur(function(
我有一个基于类的 View 。我在引导模式上使用 Ajax。为了避免页面刷新,我想使用此类基于 View 返回 JSON 响应而不是 HTTP 响应,但我只看到了如何为基于函数的 View 返回 JS
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个大型内部企业基于 Web 的应用程序在 IIS6 上运行 ASP.NET 3.5,生成 401 个“未经授权”响应,然后是 200 个“Ok”响应(如 Fiddler 所述)。我知道为什么会发
感谢您研究我的问题。 我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相
当我使用以下命令时,我得到正确的 JSON 响应: $ curl --data "regno=&dob=&mobile=" https://vitacademics-rel.herokuapp.co
我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件..
UDP 不发送任何 ack,但它会发送任何响应吗? 我已经设置了客户端服务器UDP程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗? 我的假设是; 客户端 --> 广播服务器地
我有一个电梯项目,其中 有一个扩展 RestHelper 的类,看起来像这样 serve{ "api" / "mystuff" prefix { case a
我们正在寻求覆盖 Kong 错误响应结构并编写自定义消息(即用我们的自定义消息替换“超出 API 速率限制”、“无效的身份验证凭据”等)。 我们要找的错误响应结构(代码是自定义的内部错误代码,与HTT
我正在尝试监听 EKEventStoreChangedNotification 以检查当我的应用程序处于后台时日历是否已更改。 我在 View Controller 的 initWithNibMeth
我了解 javascript,并且正在学习 ASP.NET C# 我想要做什么(完成的是javascript): document.getElementById('divID-1'
是否可以过滤所有 har 对象并仅获取 POST 请求/响应?也许在初始化 BrowserMobProxyServer 期间是这样做的方法?我需要将 har 对象保存到文件中并上传到 har 查看器。
我正在尝试向 Oauth 的 API 发送响应。遗憾的是,Symfony2 文档在解释 $response->headers->set(...); 的所有不同部分方面做得很差。 这是我的 OauthC
我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。 下面是我的模拟, with responses.RequestsMock() as rsps: url
在尝试在 Haskell 中进行一些领域驱动设计时,我发现自己遇到了这个问题: data FetchAccessories = FetchAccessories data AccessoriesRes
我正在与 ANT+ USB 棒连接,并用项目 react 器替换我自己天真的“MessageBus”,因为它看起来非常合适。 USB接口(interface)本质上是异步的(单独的输入/输出管道),我
我正在将项目迁移到AFNetworking 2.0。使用AFNetworking 1.0时,我编写了代码来记录控制台中的每个请求/响应。这是代码: -(AFHTTPRequestOperation *
我有以下代码段。 ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){
我有问题......我在 php 中有一个监听器脚本可以执行以下操作: if ($count != 1) {echo 'no';} else { echo "yes";} 因此它会回显"is"或“
我是一名优秀的程序员,十分优秀!