android 包含 post 数据的 HTTP 请求
android HTTP request with post data
好吧,我有以下情况,我有一个 java 应用程序,用户可以在其中登录,一旦他们登录就会生成一个随机密钥,我希望使用 http 请求将这个密钥发送到我的网站.
在web端我会插入到数据库中供以后使用,这个已经可以了
此刻我非常坚持 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 发送到网站。非常感谢任何帮助
您正在建立连接,但没有触发请求。您可以通过调用 conn.connect()
或 "operations that depend on being connected" (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();
}
好吧,我有以下情况,我有一个 java 应用程序,用户可以在其中登录,一旦他们登录就会生成一个随机密钥,我希望使用 http 请求将这个密钥发送到我的网站.
在web端我会插入到数据库中供以后使用,这个已经可以了
此刻我非常坚持 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 发送到网站。非常感谢任何帮助
您正在建立连接,但没有触发请求。您可以通过调用 conn.connect()
或 "operations that depend on being connected" (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();
}