Instagram api - Retrofit2 - 无法执行POST请求

时间:2018-02-07 23:25:14

标签: android curl retrofit retrofit2 instagram-api

我是翻新的新手,我正在尝试使用改造和Instagram API向特定媒体发送评论。 Instagram API告诉我,我的请求必须是:

curl -F 'access_token=ACCESS-TOKEN' 
     -F 'text=This+is+my+comment'
     https://api.instagram.com/v1/media/{media-id}/comments

并且JSON响应是:

{
    "meta": 
    {
        "code": 200
    }, 
    "data": null
}

所以我做了这个改进语法:

@FormUrlEncoded
@POST("v1/media/{media_id}/comments")
Call<Object> postComment(
        @Path("media_id") String mediaId,
        @Field("access_token") String accessToken,
        @Field("text") String text);

我的改造服务:

public class RestClient 
{
    public static RetrofitInstagram getRetrofitService() 
    {
       return new Retrofit.Builder()
                .baseUrl(Constants.AUTH_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build().create(RetrofitInstagram.class);
    }
}

我的调用(在AlertDialog内部从EditText获取文本)是:

Call<Object> call = RestClient.getRetrofitService().postComment(data.get(idx).getId(), access_token, titleEditText.getText().toString());
                    call.enqueue(new Callback<Object>()
                    {
                        @Override
                        public void onResponse(Call<Object> call, Response<Object> response)
                        {
                            Log.d("response comment", ""+response.raw());
                            Toast.makeText(activity_instagram_feed_search.this, "Comments sent", Toast.LENGTH_SHORT).show();
                        }
                        @Override
                        public void onFailure(Call<Object> call, Throwable t)
                        {
                            Toast.makeText(activity_instagram_feed_search.this, "error", Toast.LENGTH_SHORT).show();
                        }
                    });

我的问题是我收到代码400错误(缺少client_id或access_token URL参数。)。

就像api认为我正在做GET请求。

我真的很困惑,我会感激一些智慧:)。

1 个答案:

答案 0 :(得分:0)

我设法找到了我的问题的解决方案。 所以Ben P错了,Curl -F是x-www-form-urlencoded。

我处于沙箱帐户模式,忘记将注释范围添加到我的登录名 WebView请求。

所以我的WebView网址现在是:

private final String url = Constants.AUTH_URL
        + "oauth/authorize/?client_id="
        + Constants.CLIENT_ID
        + "&redirect_uri="
        + Constants.REDIRECT_URI
        + "&response_type=token"
        + "&display=touch&scope=public_content+comments";