改造,okhttp3 添加 header
retrofit , okhttp3 add header
我需要从站点获取 XML 文件。我正在学习使用 Retrofit。
我需要发出请求并通过 "X-AppId"
header 附加我的 API 密钥。它应该是这样的:
X-AppId: my key.
如果我从浏览器执行此操作,我会得到答案。
通过改造我获得了访问权限
error 403 Forbidden code = 403, message = Forbidden, url = https: //
告诉我它是如何正确实施以接收来自服务器的回答code = 200
这是我的实现:
public interface myAPIinterface {
@GET("/api/ru/index/route/?from=Minsk&to=Warsaw")
Call<Routes> getProducts();
}
这是我输出到日志的activity:
private void getProducts(){
final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Log.d(TAG, "getProducts");
httpClient.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("X-AppId:", "97377f7b702d7198e47a2bf12eec74")
.build();
return chain.proceed(request);
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://rasp.rw.by")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
myAPIinterface api = retrofit.create(myAPIinterface.class);
Call<Routes> call = api.getProducts();
call.enqueue(new Callback<Routes>() {
@Override
public void onResponse(@NonNull Call<Routes> call, @NonNull Response<Routes> response) {
Log.d(TAG, "onResponse");
Log.d(TAG, String.valueOf(kk));
Log.d(TAG, String.valueOf(response));
loading.dismiss();}
@Override
public void onFailure(Call<Routes> call, Throwable throwable) {
loading.dismiss();
Log.d(TAG, "onFailure" + throwable);
}
});
这是日志:
Response{protocol=http/1.1, code=403, message=Forbidden,
url=https://rasp.rw.by/api/ru/index/route/?from=Minsk&to=Warsaw}
如果我访问 third-party 个没有 header 的站点,我会毫无问题地收到 200 的响应。在这种情况下我做错了什么?谢谢。
哦,伙计,你在做什么。可以使用@Query、@Header等注解
public interface myAPIinterface {
@GET("/api/ru/index/route")
Call<Routes> getProducts(@Header("X-AppId:") String YOUR_APP_ID,
@Query("from") String from,
@Query("to") String to)
}
然后你可以这样创建请求:
Retrofit retrofit = new Retrofit.Builder().
.baseUrl("https://rasp.rw.by")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
retrofit.create(myAPIinterface.class).getProducts(myId, "Minsk", "Warsaw").enqueue ...
它有什么帮助?你忘记在第二次改造时添加 header 然后你有 403 错误。所以,你必须添加注释,这将是你忘记给 header/query/etc 赋值的最后一个错误。
我需要从站点获取 XML 文件。我正在学习使用 Retrofit。
我需要发出请求并通过 "X-AppId"
header 附加我的 API 密钥。它应该是这样的:
X-AppId: my key.
如果我从浏览器执行此操作,我会得到答案。 通过改造我获得了访问权限
error 403 Forbidden code = 403, message = Forbidden, url = https: //
告诉我它是如何正确实施以接收来自服务器的回答code = 200
这是我的实现:
public interface myAPIinterface {
@GET("/api/ru/index/route/?from=Minsk&to=Warsaw")
Call<Routes> getProducts();
}
这是我输出到日志的activity:
private void getProducts(){
final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Log.d(TAG, "getProducts");
httpClient.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("X-AppId:", "97377f7b702d7198e47a2bf12eec74")
.build();
return chain.proceed(request);
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://rasp.rw.by")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
myAPIinterface api = retrofit.create(myAPIinterface.class);
Call<Routes> call = api.getProducts();
call.enqueue(new Callback<Routes>() {
@Override
public void onResponse(@NonNull Call<Routes> call, @NonNull Response<Routes> response) {
Log.d(TAG, "onResponse");
Log.d(TAG, String.valueOf(kk));
Log.d(TAG, String.valueOf(response));
loading.dismiss();}
@Override
public void onFailure(Call<Routes> call, Throwable throwable) {
loading.dismiss();
Log.d(TAG, "onFailure" + throwable);
}
});
这是日志:
Response{protocol=http/1.1, code=403, message=Forbidden, url=https://rasp.rw.by/api/ru/index/route/?from=Minsk&to=Warsaw}
如果我访问 third-party 个没有 header 的站点,我会毫无问题地收到 200 的响应。在这种情况下我做错了什么?谢谢。
哦,伙计,你在做什么。可以使用@Query、@Header等注解
public interface myAPIinterface {
@GET("/api/ru/index/route")
Call<Routes> getProducts(@Header("X-AppId:") String YOUR_APP_ID,
@Query("from") String from,
@Query("to") String to)
}
然后你可以这样创建请求:
Retrofit retrofit = new Retrofit.Builder().
.baseUrl("https://rasp.rw.by")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
retrofit.create(myAPIinterface.class).getProducts(myId, "Minsk", "Warsaw").enqueue ...
它有什么帮助?你忘记在第二次改造时添加 header 然后你有 403 错误。所以,你必须添加注释,这将是你忘记给 header/query/etc 赋值的最后一个错误。