404访问https URL-Java时出错,但与邮递员或SOAPUI一起工作正常
11月21日编辑:我曾尝试使用浏览器直接访问URL,它给出了相同的404错误响应。但在登记邮递员代码时,我可以看到电话如下所示。有人能告诉我怎么在同一条路上打电话吗?谢谢 POST/api/test/PW/authentication/user HTTP/1.1 主机:www.hostname.com X-API-Key:saksj82kqjsak290d 缓存控制:没有缓存 邮递员代币:2b7fl871-195a-4782-9000-6ce269242704 内容类型:多部分/表单数据;边界=----WebKitFormBoundary7MA4YWxkTrZu0gW 内容配置:表单数据;name=“凭证” 用户123 内容配置:表单数据;name=“密码” 密码123 ------WebKitFormBoundary7MA4YWxkTrZu0gW-- 原始消息: 我在使用Java代码从https Rest APi获取令牌时遇到问题。 请求URL: 卷曲: curl-X POST--header'Content Type:application/X-www-form-urlencoded'--header'Accept:application/json'--header'ApiKey:saksj82kqjsak290d-d'userid=user123&password=pass123' 方法:邮寄 一旦我发送Post REQUYEST,我将以JSON格式获取标题值中的令牌。但是在对服务器进行ping操作时,我得到了来自Java的404rsponse。但是使用POSTMAN工具,我得到的响应是200,响应头数据中有适当的令牌 注意:我已将此处的URL更改为一些虚拟URL 到目前为止,我已经尝试了以下方法,但不确定哪里出了问题404访问https URL-Java时出错,但与邮递员或SOAPUI一起工作正常,java,post,token,api-key,Java,Post,Token,Api Key,11月21日编辑:我曾尝试使用浏览器直接访问URL,它给出了相同的404错误响应。但在登记邮递员代码时,我可以看到电话如下所示。有人能告诉我怎么在同一条路上打电话吗?谢谢 POST/api/test/PW/authentication/user HTTP/1.1 主机:www.hostname.com X-API-Key:saksj82kqjsak290d 缓存控制:没有缓存 邮递员代币:2b7fl871-195a-4782-9000-6ce269242704 内容类型:多部分/表单数据;边界=
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代码中设置
内容类型
属性。您正在访问的服务器可能需要该头来处理您在POST请求中传递的参数 尝试在java代码中设置内容类型
属性。您正在访问的服务器可能需要该头来处理您在POST请求中传递的参数 在Java代码中,bodydata是json,但在curl命令中,您传递的是用户ID和密码,格式为x-www-form-urlencoded。最有可能的情况是,服务期望的是后者,因此当您将其作为前者传入时,它没有获得正确的值。在Java代码中,bodydata是json,但在curl命令中,您传入的用户ID和密码格式为x-www-form-urlencoded。最有可能的情况是,服务期望的是后者,因此当您将其作为前者传入时,它无法获得正确的值。它已处理了以下更改:
String bodaydata= "credential=user123&password=pass123";
它的工作方式有以下变化:
String bodaydata= "credential=user123&password=pass123";
运气不好,我也试过了,但回复代码是一样的:404。我是按旋度传球的,但无法成功。但是soapui和POSTMan工作得很好。也不确定,因为httpS url,它需要一些额外的代码,因为我不确定。运气不好,我也尝试过,但相同的响应代码:404。我是按旋度传球的,但无法成功。但是soapui和POSTMan工作得很好。也不确定,因为httpS url,它需要一些额外的代码,因为我不确定。请输入任何内容?请输入任何内容?我只发送标题中编码的x-www-form-url,刚刚用相同的代码更新。但我用带大括号的JSON格式发送用户id和密码。还是不走运。你能不能说“很可能,服务期望的是后者,所以当你把它作为前者传递进来时,它没有得到正确的值”看起来你已经明白了。当您将内容类型设置为x-www-form-urlencoded时,您是在告诉服务器希望请求数据采用某种格式。在本例中,格式类似于查询字符串的格式化方式。最初,您以不同的格式发送请求数据,该格式被编码为JSON。由于服务器不希望使用该格式,因此无法正确获取您发送的数据。感谢您的解释,但实际上,在按照下面指定的不同格式更正凭据之后,发送到x-www-form-urlencoded的内容类型实际上不是必需的,因为我已经发送了,以接受application/json格式。不过,非常感谢您的投入。我发送的x-www-form-urlencoded仅在标题中,刚刚更新相同。但我用带大括号的JSON格式发送用户id和密码。还是不走运。你能不能说“很可能,服务期望的是后者,所以当你把它作为前者传递进来时,它没有得到正确的值”看起来你已经明白了。当您将内容类型设置为x-www-form-urlencoded时,您是在告诉服务器希望请求数据采用某种格式。在本例中,格式类似于查询字符串的格式化方式。最初,您以不同的格式发送请求数据,该格式被编码为JSON。由于服务器不希望使用该格式,因此无法正确获取您发送的数据。感谢您的解释,但实际上,在按照下面指定的不同格式更正凭据之后,发送到x-www-form-urlencoded的内容类型实际上不是必需的,因为我已经发送了,以接受application/json格式。不过,非常感谢您的投入。