404 访问 https URL - Java 时出错,但与 POSTMAN 或 SOAPUI 一起工作正常
404 Error in accessing https URL - Java , but working fine with POSTMAN or SOAPUI
11 月 21 日编辑: 我试过直接使用浏览器访问 URL,它给了我相同的 404 错误响应。但是在检查 POSTMAN - code 时,我可以看到调用如下所示。那么有人可以让我知道如何以同样的方式发送呼叫吗?谢谢
POST /api/test/PW/authentication/user
HTTP/1.1
主持人:www.hostname.com
X-API-Key: saksj82kqjsak290d
cache-control: no-cache
Postman-Token: 2b7fl871-195a-4782-9000-6ce269242704
Content-Type: multipart/form-data;边界=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data;名字="credential"
user123
Content-Disposition: form-data;名字="password"
pass123
------WebKitFormBoundary7MA4YWxkTrZu0gW--
原始消息:
我在使用 Java 代码从 https Rest APi 获取令牌时遇到问题。
请求 URL : https://www.hostname.com/api/test/PW/authentication/user
卷曲:
curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --header 'ApiKey: saksj82kqjsak290d -d 'userid=user123&password=pass123' 'https://www.hostname.com/api/test/PW/authentication/user'
方法:POST
一旦我发送 Post 请求,我将以 JSON 格式获得 Header 值的令牌。但是在对服务器执行 ping 操作时,我从 Java 收到了 404 响应。但是使用 POSTMAN 工具,我得到的响应为 200,并带有适当的令牌作为响应 header 数据。
注意:我已将此处的 URL 更改为一些虚拟值。
到目前为止,我已经尝试了以下方法,但不确定哪里出错了。
import java.net.*;
import java.io.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.net.HttpuConnection;
import javax.net.ssl.HttpsuConnection;
import java.lang.annotation.Retention;
import java.net.MalformedURLException;
public class Tokenhttps {
public static void main(String[] args) throws MalformedURLException {
int code;
String httpsurl = "https://www.hostname.com/api/test/PW/authentication/user";
String KeytoPass = "saksj82kqjsak290d";
try{
URL httpurl = new URL(httpsurl);
HttpuConnection uConnect = (HttpuConnection) httpurl.openConnection();
//Set header
uConnect.setDoOutput(true);
uConnect.setRequestMethod("POST");
urlConnect.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
uConnect.setRequestProperty("Accept", "application/json");
uConnect.setRequestProperty("ApiKey", KeytoPass);
//Set body
String bodydata ="{\"userid\":\"user123\",\"password\":\"pass123\"}";
//POST
DataOutputStream dos = new DataOutputStream (uConnect.getOutputStream ());
dos.write(bodydata.getBytes());
dos.flush();
// Read the response.
InputStreamReader isr = null;
code = uConnect.getResponseCode();
System.out.println("responseCode:" + code );
if (code == 200) {
System.out.println("Connection is Success" );
isr = new InputStreamReader(uConnect.getInputStream());
//Print Header Fields
System.out.println("HeaderValues :"+uConnect.getHeaderFields ());
}
else {
isr = new InputStreamReader(uConnect.getErrorStream());
}
}
catch(Exception errormsg){
System.out.println("Error: " +errormsg);
}
}
}
尝试在 java 代码中设置 content-type
属性。您访问的服务器可能需要 header 来处理您通过 POST 请求传递的参数。
在 Java 代码中,正文数据是 json 但在 curl 命令中,您传递的用户 ID 和密码格式为 x-www-form-urlencoded。最有可能的是,该服务期待后者,因此当您将其作为前者传入时,它无法获得正确的值。
它适用于以下更改:
String bodaydata= "credential=user123&password=pass123";
11 月 21 日编辑: 我试过直接使用浏览器访问 URL,它给了我相同的 404 错误响应。但是在检查 POSTMAN - code 时,我可以看到调用如下所示。那么有人可以让我知道如何以同样的方式发送呼叫吗?谢谢
POST /api/test/PW/authentication/user HTTP/1.1
主持人:www.hostname.com X-API-Key: saksj82kqjsak290d
cache-control: no-cache
Postman-Token: 2b7fl871-195a-4782-9000-6ce269242704
Content-Type: multipart/form-data;边界=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data;名字="credential"
user123
Content-Disposition: form-data;名字="password"
pass123 ------WebKitFormBoundary7MA4YWxkTrZu0gW--
原始消息: 我在使用 Java 代码从 https Rest APi 获取令牌时遇到问题。 请求 URL : https://www.hostname.com/api/test/PW/authentication/user 卷曲: curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --header 'ApiKey: saksj82kqjsak290d -d 'userid=user123&password=pass123' 'https://www.hostname.com/api/test/PW/authentication/user' 方法:POST
一旦我发送 Post 请求,我将以 JSON 格式获得 Header 值的令牌。但是在对服务器执行 ping 操作时,我从 Java 收到了 404 响应。但是使用 POSTMAN 工具,我得到的响应为 200,并带有适当的令牌作为响应 header 数据。
注意:我已将此处的 URL 更改为一些虚拟值。
到目前为止,我已经尝试了以下方法,但不确定哪里出错了。
import java.net.*;
import java.io.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.net.HttpuConnection;
import javax.net.ssl.HttpsuConnection;
import java.lang.annotation.Retention;
import java.net.MalformedURLException;
public class Tokenhttps {
public static void main(String[] args) throws MalformedURLException {
int code;
String httpsurl = "https://www.hostname.com/api/test/PW/authentication/user";
String KeytoPass = "saksj82kqjsak290d";
try{
URL httpurl = new URL(httpsurl);
HttpuConnection uConnect = (HttpuConnection) httpurl.openConnection();
//Set header
uConnect.setDoOutput(true);
uConnect.setRequestMethod("POST");
urlConnect.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
uConnect.setRequestProperty("Accept", "application/json");
uConnect.setRequestProperty("ApiKey", KeytoPass);
//Set body
String bodydata ="{\"userid\":\"user123\",\"password\":\"pass123\"}";
//POST
DataOutputStream dos = new DataOutputStream (uConnect.getOutputStream ());
dos.write(bodydata.getBytes());
dos.flush();
// Read the response.
InputStreamReader isr = null;
code = uConnect.getResponseCode();
System.out.println("responseCode:" + code );
if (code == 200) {
System.out.println("Connection is Success" );
isr = new InputStreamReader(uConnect.getInputStream());
//Print Header Fields
System.out.println("HeaderValues :"+uConnect.getHeaderFields ());
}
else {
isr = new InputStreamReader(uConnect.getErrorStream());
}
}
catch(Exception errormsg){
System.out.println("Error: " +errormsg);
}
}
}
尝试在 java 代码中设置 content-type
属性。您访问的服务器可能需要 header 来处理您通过 POST 请求传递的参数。
在 Java 代码中,正文数据是 json 但在 curl 命令中,您传递的用户 ID 和密码格式为 x-www-form-urlencoded。最有可能的是,该服务期待后者,因此当您将其作为前者传入时,它无法获得正确的值。
它适用于以下更改:
String bodaydata= "credential=user123&password=pass123";