2017-09-16 59 views
0

我尝试从Twitter(仅限app)获取授权令牌,代码几乎完全遵循官方指南,但获得503服务不可用代码。503使用Twitter OAUTH的HTTP响应代码

 @Override 
    protected Boolean doInBackground(Void... params) { 
     String cred_enc = tw_cons_key + ":" + tw_priv_cons_key; 
     cred_enc = Base64.encodeToString(cred_enc.getBytes(), Base64.NO_WRAP); 

     Request request = new Request.Builder().url("https://api.twitter.com/oauth2/token") 
       .header("Authorization:", "Basic " + cred_enc) 
       .header("Content-Type:", "application/x-www-form-urlencoded;charset=UTF-8") 
       .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody)) 
       .build(); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       ResponseBody body = response.body(); 
       if (response.isSuccessful()) { 
        Headers headers = response.headers(); 

        //response check 
        for (int i = 0; i < headers.size(); i++) { 
         System.out.println("Headers: " + i + " " + headers.name(i) + " : " + headers.value(i)); 
        } 
        System.out.println(body.string()); 

        try { 
         JSONObject jsonObject = new JSONObject(body.string()); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } else { 
        throw new IOException("Unexpected code" + response); 
       } 
       body.close(); 
      } 
     }); 
     return true; 
    } 

可能的原因是什么?

+0

在NetBeans中运行的相同代码返回403 Forbidden ... – Bord81

+0

HttpUrlConnection也会导致403,但curl起作用! Java有什么问题? – Bord81

回答

0

它需要我在本地主机上编写一个简单的服务器来找出实际生成的HTTP请求。

问题出在冒号:.header("Authorization:"导致Authorization::在网络请求!

当我从标题键值中删除冒号后,HttpUrlConnection和OkHttp代码变体都可以无缝工作。