java– 使用Android发送HTTP Post请求

java– 使用Android发送HTTP Post请求,第1张

概述我一直试图从SO和其他网站上的大量例子中学习,但我无法弄清楚为什么我一起攻击的例子不起作用.我正在构建一个小概念验证应用程序来识别语音并将其作为POST请求发送到node.js服务器.语音识别我已经确认工作,服务器正在接收来自常规浏览器访问的连接,因此我认为问题出在应用程序本身

我一直试图从SO和其他网站上的大量例子中学习,但我无法弄清楚为什么我一起攻击的例子不起作用.我正在构建一个小概念验证应用程序来识别语音并将其作为POST请求发送到node.Js服务器.语音识别我已经确认工作,服务器正在接收来自常规浏览器访问的连接,因此我认为问题出在应用程序本身.我错过了一些小而愚蠢的东西吗?没有错误被抛出,但服务器永远不会识别连接.提前感谢任何建议或帮助.

相关Java(主要活动和必要的AsyncTask):

protected voID onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == 1001) {        if (resultCode == RESulT_OK) {            ArrayList<String> textMatchList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESulTS);            if (!textMatchList.isEmpty()) {                String topMatch = textMatchList.get(0);                PostTask pt = new PostTask();                pt.execute(topMatch);            }        }    }}private class PostTask extends AsyncTask<String, String, String> {    @OverrIDe    protected String doInBackground(String... data) {        try {            URL url = new URL("http://<ip address>:3000");            httpURLConnection conn = (httpURLConnection) url.openConnection();            conn.setReadTimeout(10000);            conn.setConnectTimeout(15000);            conn.setRequestMethod("POST");            conn.setDoOutput(true);            ContentValues values = new ContentValues();            values.put("data", data[0]);            OutputStream os = conn.getoutputStream();            BuffereDWriter writer = new BuffereDWriter(new OutputStreamWriter(os, "UTF-8"));            StringBuilder sb = new StringBuilder();            sb.append(URLEncoder.encode("data", "UTF-8"));            sb.append("=");            sb.append(URLEncoder.encode(data[0], "UTF-8"));            writer.write(sb.toString());            writer.flush();            writer.close();            os.close();            conn.connect();            return "Text sent: " + data[0];        } catch (IOException e) {            e.printstacktrace();            return "Lol nopE";        }    }}

服务器Js:

var http = require('http');const PORT=3000;function handleRequest(request, response){    response.end('It Works!! Path Hit: ' + request.url);    console.log("Request got.");}var server = http.createServer(handleRequest);server.Listen(PORT, '0.0.0.0');console.log("Listening on 3000...");

解决方法:

您可以使用Apache Commons的http ClIEnt.例如:

private class PostTask extends AsyncTask<String, String, String> {  @OverrIDe  protected String doInBackground(String... data) {    // Create a new httpClIEnt and Post header    httpClIEnt httpclIEnt = new DefaulthttpClIEnt();    httpPost httppost = new httpPost("http://<ip address>:3000");    try {      //add data      List<nameValuePair> nameValuePairs = new ArrayList<nameValuePair>(1);      nameValuePairs.add(new BasicnameValuePair("data", data[0]));      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));      //execute http post      httpResponse response = httpclIEnt.execute(httppost);    } catch (ClIEntProtocolException e) {    } catch (IOException e) {    }  }}

UPDATE

您可以使用Volley AndroID Networking library发布您的数据.官方文件是here.

我个人使用Android Asynchronous Http Client进行少数REST客户端项目.

其他值得探索的工具是Retrofit.

总结

以上是内存溢出为你收集整理的java – 使用Android发送HTTP Post请求全部内容,希望文章能够帮你解决java – 使用Android发送HTTP Post请求所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1103536.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存