【问题标题】:android HTTP request with post data带有发布数据的 android HTTP 请求
【发布时间】:2016-09-29 19:53:15
【问题描述】:

好吧,我有以下情况,我有一个 java 应用程序,用户可以登录,一旦他们这样做会生成一个随机密钥,我希望使用 http 请求将此密钥发送到我的网站。

在网页端我会把它插入数据库以备后用,这已经工作了。

现在,我非常坚持 java 方面。我正在使用以下代码来尝试 http 请求:

private void startRegistration(String username, String password) {

    String myRandomString = randomString(6);
    String deviceId = "abc";
    startToast(myRandomString);

    try {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        insertDevice(myRandomString, deviceId);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@TargetApi(Build.VERSION_CODES.KITKAT)
public void insertDevice(String randomString, String deviceId) throws IOException {

//        String urlParameters  = "key=" + randomString + "&device_id="+ deviceId;
//        byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
//        int    postDataLength = postData.length;
    String request        = "http://website.com/test";
    URL    url            = new URL( request );

    HttpURLConnection conn= (HttpURLConnection) url.openConnection();
        conn.setDoOutput( true );
        conn.setInstanceFollowRedirects( false );
        conn.setRequestMethod( "GET" );
        conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty( "charset", "utf-8");
//            conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
        conn.setUseCaches( false );

    try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
//            wr.write( postData );
        Context context = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, "test", duration);
        toast.show();
       }
   }

在 web 端,我设置了一个路由来捕获这个请求,然后简单地抛出一个 log::info,这样我就可以检查请求是否到达那里,如下所示:

public function create() {

    Log::info('I got here, hurray!');
}

现在,当我在浏览器中点击 URL 时,我可以看到出现的日志,而当我使用我的应用程序时,却没有。但是也没有抛出任何错误。

最后,我想使用 POST 请求并将随机密钥和设备 ID 发送到网站。非常感谢任何帮助

【问题讨论】:

标签: java android http-request


【解决方案1】:

您正在建立连接,但没有触发请求。您可以通过调用conn.connect() 或“依赖连接的操作”(javadoc)来执行请求

这是一个 POST 请求的示例:

public void insertDevice(String randomString, String deviceId) {

    String request = "http://website.com/test";
    URL url = new URL(request);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setRequestMethod("POST");

    String urlParameters = "key=" + randomString + "&device_id=" + deviceId;
    byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

    conn.setDoOutput(true);

    try (OutputStream os = conn.getOutputStream()) {
        os.write(postData);
    }

    conn.connect();

    // Get response code, e.g. 200.
    // conn.getResponseCode();

    // Read server response data with conn.getInputStream() or conn.getErrorStream().

    conn.disconnect();
}

【讨论】:

  • 遗憾的是,这仍然没有在网络服务器上弹出我的日志,但也没有抛出任何错误。
  • @killstreet 甚至没有固定版本 o GET 访问服务器?
  • 没关系,它正在工作,只是服务器日志有一点延迟,你太棒了:) 非常感谢!
猜你喜欢
  • 2019-06-24
  • 2012-07-06
  • 1970-01-01
  • 2023-03-08
  • 2016-01-12
  • 2022-02-07
  • 2017-08-14
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多