首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Java发出带有身份验证令牌的api请求

通过Java发出带有身份验证令牌的api请求
EN

Stack Overflow用户
提问于 2016-05-28 07:42:29
回答 1查看 4.7K关注 0票数 3

我是软件开发的新手,我正在从事一个项目,该项目使用持有者令牌对交易服务器进行API调用。

我已经知道了如何通过命令行通过curl调用API。它看起来像这样(它是通过http而不是https,因为我使用的是他们的测试服务器,它只支持http请求)

代码语言:javascript
运行
复制
curl http://api.testwebsite.com/transactions/ \
-H "Authorization: Bearer <TOKEN ID>" \
-d amount=500 \
-d currency="USD" \
-d card_number="<card number>" \
-d card_exp_month=<exp month> \
-d card_exp_year=<exp year> \
-d card_cvv="<card's ccv>"

现在,我正在用Java语言(必须是Java语言)编写一个程序,只使用原生的Java库(没有像Spring或Apache这样的第三方包),并且我正尝试通过HttpUrlConnection调用该应用程序接口。

代码语言:javascript
运行
复制
import java.io.BufferedReader; 
import java.io.InputStreamReader;
import java.io.DataOutputStream; 
import java.net.URL;             
import javax.net.ssl.HttpsURLConnection;
import java.net.HttpURLConnection;

public class TestHttpsPost {

public static void main(String[] args) throws Exception {

    // Uncomment one of these next two lines:
    URL url = new URL("http://api.testwebsite.com/transactions");
    //URL url = new URL("https://httpbin.org/post"); // good for testing

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoInput(true);
    connection.setDoOutput(true);

    // Change this to a valid token:
    connection.setRequestProperty("Authorization", "Bearer <TOKEN ID>");
    /*

    connection.setRequestProperty("amount", "500");
    connection.setRequestProperty("currency", "USD");
    connection.setRequestProperty("card_number", "<CARD_NUMBER>");
    connection.setRequestProperty("card_exp_month", "<EXP_MONTH>");
    connection.setRequestProperty("card_exp_year", "<EXP_YEAR");
    connection.setRequestProperty("card_cvv", "<CCV>");
    */




    String jsonData1 = "amount=500";
    String jsonData2 = "currency=\"USD\"";
    String jsonData3 = "card_number=\"11111111111111111\"";
    String jsonData4 = "card_exp_month=11";
    String jsonData5 = "card_exp_year=2011";
    String jsonData6 = "card_cvv=\"123\"";




    try {
        // Post the data:
        DataOutputStream output = new DataOutputStream(connection.getOutputStream());
        output.writeBytes(jsonData1);
        output.writeBytes(jsonData2);
        output.writeBytes(jsonData3);
        output.writeBytes(jsonData4);
        output.writeBytes(jsonData5);
        output.writeBytes(jsonData6);

        output.close();

        // Read the response:
        BufferedReader reader = new BufferedReader(new InputStreamReader(
          connection.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    System.out.println("Response code:" + connection.getResponseCode());
    System.out.println("Response message:" + connection.getResponseMessage());
}
}

但是我不断地得到

代码语言:javascript
运行
复制
Server returned HTTP response code: 400 for URL: http://api.testwebsite.com/transactions
Response code:400
Response message:Bad Request

我关注了Transforming a PayPal curl request to an http request in Java,但是paypal api的字段非常不同,我不确定我是不是搞砸了什么。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-05-28 07:52:43

真正不错的选择是使用Retrofit (一种适用于java和安卓的-safe http客户端)

http://square.github.io/retrofit/

以下是使用身份验证令牌的服务示例:

代码语言:javascript
运行
复制
public class ServiceGenerator {
    public static final String BASE_URL = "https://your.api.url";
    // returns an API client of type serviceClass
    public static <S> S createService(
            Class<S> serviceClass, final String token) {
        RestAdapter.Builder builder = new RestAdapter.Builder() .setEndpoint(BASE_URL)
                .setClient(new OkClient(new OkHttpClient()));
        if (token != null) {
            builder.setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) { request.addHeader("Accept", "application/json"); request.addHeader("Authorization", token);
                } });
        }
        RestAdapter adapter = builder.build();
        return adapter.create(serviceClass); }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37493747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档