【问题标题】:Instagram api - Retrofit2 - unable to do POST requestInstagram api - Retrofit2 - 无法执行 POST 请求
【发布时间】:2018-02-07 23:25:14
【问题描述】:

我是改造新手,我正在尝试使用改造和 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 请求。

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

【问题讨论】:

  • curl -F 参数对应于 multipart/form-data 而不是 application/x-www-form-urlencoded,所以你可能不想要@FormUrlEncoded
  • 感谢您的建议,我更新了改造语法,但我仍然有与 no access_token 相关的代码 400

标签: android curl retrofit retrofit2 instagram-api


【解决方案1】:

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

我处于沙盒帐户模式,忘记将 cmets 范围添加到我的登录 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";

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多