【问题标题】:Can HTTP requests be sent from Glass?可以从 Glass 发送 HTTP 请求吗?
【发布时间】:2015-03-21 16:23:07
【问题描述】:

我正在为 Google Glass 开发,并且在将文件从 Glass 上传到我用来管理 API 调用的 servlet 应用程序时遇到问题。我使用开发人员的控制台设置了一个客户端 ID 和密码来验证来自 servlet 应用程序的 api 调用。我已经看到这些链接提到来自 glass 的 http 请求:
HTTP Requests in Glass GDK 1
Google Glass upload files using http-client
...但他们并没有非常有帮助。 我确实在清单文件中设置了 Internet 权限。这是我的代码:

public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
  private static final String TAG = "MyAsyncTask";
  private static String FILE_PATH;
  private String fileType;
  private static final String HOST_URL="http://10.0.2.2:8080/main";
  private static java.io.File fileToUpload;

public MyAsyncTask(String filePath){
    FILE_PATH=filePath;
    fileToUpload=new java.io.File(FILE_PATH);
    Log.d(TAG,FILE_PATH);
    fileType=FILE_PATH.substring(FILE_PATH.indexOf("."));
}
@Override
protected Void doInBackground(Void... params) {
    post();
    return null;
}

private int post() {

    int resultCode = 0;

    String url = HOST_URL;

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);


    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("source", "glass"));

    try {
        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);
        System.out.println("\nSending 'POST' request to URL : " + url);
        System.out.println("Post parameters : " + post.getEntity());
        System.out.println("Response Code : " +
                response.getStatusLine().getStatusCode());

        resultCode = response.getStatusLine().getStatusCode();

        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

        System.out.println(result.toString());
    } catch (Exception e) {
        Log.e("POST", e.getMessage());
    }

    return resultCode;
}

调用MyAsyncTask(filePath).execute()的结果;是连接被拒绝。我将 URL 设置为原来的值,因为我读到 localhost 可能指的是 Glass 设备,就像它在运行 Android 模拟器时所做的那样,但 servlet 在http://localhost:8080 上运行。

作为参考,我将 Jetty 6.1.x 用于我的 servlet。

我的问题可能是什么? Glass 不支持触​​发 HTTP 请求吗?我应该尝试在我没有的地方进行身份验证吗?如果需要,我很乐意提供任何其他参考信息。我非常感谢任何指导和专业知识。谢谢。

【问题讨论】:

  • 谷歌眼镜就像一个普通的安卓设备。所以http请求的行为是一样的。在本地网络中工作与 Google 无关,而与任何设备有关。您应该寻找如何从 Android 设备访问本地网络。你会找到你的答案
  • @SimonMarquis。我对此进行了广泛的研究。我知道正在运行的设备的本地主机就是设备本身。我尝试了网络IP地址,但仍然出现连接被拒绝异常
  • 您是否尝试使用运行服务器的机器的私有本地 IP 地址?编辑:例如看看这个:stackoverflow.com/questions/19132059/…
  • 我在 Mac 上工作,我使用 ifconfig 获取此地址并使用它。它仍然给了我一个连接被拒绝的消息。但是,我没有更改提到的 httpd.conf 文件
  • 如果你不这样做,服务器将拒绝该设备。

标签: java android http servlets google-glass


【解决方案1】:

Glass 支持 HTTP 调用 - 我认为这不是您的问题。

问题似乎更可能在于您的 servlet 或网络配置(或它们的某种组合)。

需要检查的一些事项:

  • 确保您的 Glass 已连接到您的本地网络,并且与您的服务器所连接的本地网络相同。您的服务器的 10.x.x.x 地址表明它在专用网络上,您需要确保 Glass 在同一个专用网络上。
    • 您可以通过转到 Glass 上的设置屏幕来检查并确认它连接到哪个 wifi 网络。确保它显示“Wi-Fi”。点击屏幕,它应该会告诉您您连接到哪个 wifi 网络。
    • 要验证,您可能需要获取设备的 IP 地址。请参阅this answer 了解一些可能有助于您这样做的代码。
  • 确保您可以通过您提供的地址访问服务器。如果可以,请使用另一台机器(在同一网络上)上的浏览器。确保您使用 Glass 应用程序将使用的确切 URL - http://10.0.2.2:8080/main
    • 使用 IP 地址而不是“localhost”很重要。
    • 在同一台机器上与同一网络上的另一台机器上测试它可能会指向机器上的防火墙是否阻止该端口。
  • 确认您的 servlet 正在侦听的端口。
    • 您没有谈论您正在使用什么 servlet 引擎,因此很难准确指出您应该检查哪个文件的配置。如果您让我们知道,如果您不知道,我们或许可以为您指明正确的方向。
    • Glass 上的 URL 指向 8080,因此请确保您的 servlet 也设置为使用该端口。 (8080 是一个非常典型的端口,但不能保证。)您的 servlet 不应自行打开端口 - 让 servlet 容器处理。
  • 检查您的 servlet 日志,尤其是访问日志,以查看 Glass 设备和您上面的手动测试是否实际连接到它。或者如果有任何东西可以连接到它。

【讨论】:

  • servlet 是否需要像套接字一样显式监听连接?
【解决方案2】:

我发现了我的问题,并意识到我可以提供更多信息。我很抱歉。无论如何,Jetty 服务器只在 localhost (127.0.0.1) 上运行。为了解决这个问题,我编辑了我的 maven 项目的 pom.xml 文件,如下所示:

-在配置标签下的 appengine 插件标签中添加了一个地址标签,地址为 0.0.0.0,端口标签为端口 8080。这允许它在本地主机上运行。
- 然后,当我尝试访问原始本地 ip 时,appengine 给出了 400 错误,因此我编辑了位于 /private/etc/hosts 之类的机器上的主机文件并添加了以下行:

my-wlan-ip fakedomain.com

但我还必须将 fakedomain.com:8080/oauth2callback 添加到我在 Google 开发者控制台的凭据下注册的重定向 uri。

这让我可以从其他设备访问我的开发服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多