gpt4 book ai didi

android - 从 Android 设备发送 HTTPS/HTTP POST 时出现 UnknownHostException

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:07 26 4
gpt4 key购买 nike

我正在尝试创建到 Google 服务器的 HTTP POST 以获得 ClientLogin Auth(如 here 所述)。该帖子的源代码并不是真正的谜,我找到了它here . (我确定我的帖子有效,因为使用 CURL 我获得了授权)

该方法非常简单,我已经相应地修改了值,但是,当我执行以下行时出现以下异常:

HttpResponse response = client.execute(post);

06-17 13:44:05.645: WARN/System.err(768): java.net.UnknownHostException: www.google.com
06-17 13:44:05.645: WARN/System.err(768): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
06-17 13:44:05.645: WARN/System.err(768): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
06-17 13:44:05.645: WARN/System.err(768): at java.net.InetAddress.getAllByName(InetAddress.java:256)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
06-17 13:44:05.645: WARN/System.err(768): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
etc.
etc.
etc…

(省略无关日志)

在尝试了各种代码组合(在 google 和此处找到)、不同的 URL(有或没有 HTTPS)、常规 HTTP 等之后。我决定尝试以下方法:

try {
InetAddress address = InetAddress.getByName("http://www.google.com");
} catch (UnknownHostException e) {
e.printStackTrace();
}

我得到了同样的错误:(也修剪了不相关的部分)

06-17 13:53:07.445: WARN/System.err(820): java.net.UnknownHostException: http://www.google.com
06-17 13:53:07.449: WARN/System.err(820): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
06-17 13:53:07.449: WARN/System.err(820): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
06-17 13:53:07.449: WARN/System.err(820): at java.net.InetAddress.getByName(InetAddress.java:325)

现在我确实重启了 Eclipse,The Phone,我什至忘记了 Wi-Fi 并重新创建了它。我在手机上使用谷歌 DNS 或 OpenDNS 的静态 IP 地址(我已经交换了它们来尝试)。手机上的互联网工作,其他应用程序工作。

确实

<uses-permission android:name="android.permission.INTERNET" /> 

在我的 list 上的正确位置(应用程序内部),事实上我也有“android.permission.ACCESS_FINE_LOCATION”,但这并没有改变任何东西。

设备

这是一款全新的 Nexus-S(已解锁),搭载 Android 2.3.4。

失败的代码

这是有问题的方法:(参见行 HttpResponse response = client.execute(post);)

请注意,我已经删除了“实际值”,但请放心,原始代码中的值是正确的。

public void getAuthentification(View view) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(
"https://www.google.com/accounts/ClientLogin");

try {

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("Email", prefs.getString(
"user", "undefined")));
nameValuePairs.add(new BasicNameValuePair("Passwd", prefs
.getString("password", "undefined")));
nameValuePairs.add(new BasicNameValuePair("accountType", "GOOGLE"));
nameValuePairs.add(new BasicNameValuePair("source",
"Google-cURL-Example"));
nameValuePairs.add(new BasicNameValuePair("service", "ac2dm"));

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));

String line = "";
while ((line = rd.readLine()) != null) {
Log.e("HttpResponse", line);
if (line.startsWith("Auth=")) {
Editor edit = prefManager.edit();
edit.putString(AUTH, line.substring(5));
edit.commit();
String s = prefManager.getString(AUTH, "n/a");
Toast.makeText(this, s, Toast.LENGTH_LONG).show();
}

}
} catch (IOException e) {
e.printStackTrace();
}
}

我错过了什么?

最佳答案

好的,看完this answer与我在其他谷歌搜索结果中看到的相反,...

<uses-permission android:name="android.permission.INTERNET" /> 

...必须在应用程序之外

我有:

       <!-- General Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

现在可以了。

关于android - 从 Android 设备发送 HTTPS/HTTP POST 时出现 UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com