Jor*_*ith 8 java host exception okhttp
我正在尝试使用com.squareup.okhttp中的OkHttpClient从API返回一些数据.我遇到了一些我最终能够克服的错误,但是我无法通过这个主机异常错误,这里的任何内容似乎都不足以让我的情况能够解决.
下面是我尝试的代码以及它的输出,如果有人知道如何克服错误我会很感激.
码
public void connect() {
OkHttpClient client = new OkHttpClient();
com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()
.url("https://socialweb-analytics.lcloud.com/api/public/reports/jobs?companyKey=ato")
.get()
.addHeader("authorization", "Basic c2RidXNpbmVzc2FuYWx5dGljc0BhdG8uZ292LmF1OkFuYWx5dGljezEh")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "65ef5553-77b5-053f-9c01-4fdf76bdc92f")
.build();
System.out.println(request.toString());
try {
Response response = client.newCall(request).execute();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
Request{method=GET, url=https://socialweb-analytics.lcloud.com/api/public/reports/jobs?companyKey=ato, tag=null}
java.net.UnknownHostException: socialweb-analytics.lcloud.com: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:922)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1314)
at java.net.InetAddress.getAllByName0(InetAddress.java:1267)
at java.net.InetAddress.getAllByName(InetAddress.java:1183)
at java.net.InetAddress.getAllByName(InetAddress.java:1119)
at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:327)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
at com.squareup.okhttp.Call.getResponse(Call.java:267)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
at com.squareup.okhttp.Call.execute(Call.java:79)
at technical_services.persistence.lithium.LithiumDataStore.connect1(LithiumDataStore.java:127)
at application.lithium_etl.LithiumTestController.main(LithiumTestController.java:24)
Run Code Online (Sandbox Code Playgroud)
小智 11
对于像"java.net.UnknownHostException:[hostname]"这样的错误
原因是你的主机名不在/ etc/hosts中,解决方案很简单:
sudo vim /etc/hosts
Run Code Online (Sandbox Code Playgroud)
改变线看起来像:
127.0.0.1 localhost
Run Code Online (Sandbox Code Playgroud)
至:
127.0.0.1 [hostname] localhost
Run Code Online (Sandbox Code Playgroud)
保存并退出.如果问题仍然存在,可能需要重启或运行:
sudo ifconfig eth0 down&&sudo ifconfig eth0 up
Run Code Online (Sandbox Code Playgroud)
希望它可以帮到你!
扩展 zhenbo xu 的精彩回答,这是我sed在 EC2 中使用自动化所做的工作。
sudo sed -i -e '/127.0.0.1/ s/\(localhost\)/'$(hostname)' \1/' /etc/hosts
请注意,为了允许变量扩展,单引号结束并围绕 subshell 调用重新启动。
hostname 是某些 Linux 系统上的可执行文件(但可能不是全部,因此您可以改用环境变量,或删除子 shell 周围的引号并使用静态字符串)。
这\1很sed神奇,它将转义括号中的“捕获”搜索字符串(s/search/replacement/)放回替换字符串中。
由于您还没有发布您的代码connect(),因此请参考我的以下工作代码
private class StringRequest extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://socialweb-analytics.lcloud.com/api/public/reports/jobs?companyKey=ato")
.addHeader("authorization", "Basic c2RidXNpbmVzc2FuYWx5dGljc0BhdG8uZ292LmF1OkFuYWx5dGljezEh")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "65ef5553-77b5-053f-9c01-4fdf76bdc92f")
.build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在onCreate里面:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
new StringRequest().execute();
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序运行并得到以下结果(可能是因为令牌过期/无效):
I/System.out: {"code":500,"message":"There was an error processing your request. It has been logged (ID a2f28b587b2f9dcc)."}
Run Code Online (Sandbox Code Playgroud)
P/S: 确保你已经设置了<uses-permission android:name="android.permission.INTERNET" />内部AndroidManifest.xml文件
| 归档时间: |
|
| 查看次数: |
29832 次 |
| 最近记录: |