有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将javascript代码转换为安卓代码如何在POST请求中添加推荐人?

我的网站上有这个java脚本代码,当有人订阅我的时事通讯时,它就会被执行。它基本上只是一个post请求。这是一段代码

function es_submit_request(url, parameters, es_widget_form) {
http_req = false;

http_req.onreadystatechange = function() {eemail_submitresult(es_widget_form)}; // Passing the form to the submit request
http_req.open('POST', url, true);
http_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_req.send(parameters);
}

可以从我的安卓应用程序代码中调用此post方法来订阅我的时事通讯吗

我尝试过这个代码here,但它不起作用

当我调试js代码时,变量值如下

parameters = "es_email=fgnfg@dgd.com&es_name=&es_group=&timestamp=&action=0.9901232281510463"
url = "http://thetechguru.in/?es=subscribe"

如果有人能帮我编写代码,我将不胜感激。我宁愿不使用任何库来实现这一点,因为我不想为这么小的事情增加开销。(仅适用于我的应用程序中的一次网络呼叫)

这是我正在尝试的一段代码,但它不起作用

String urlString = "http://www.thetechguru.in/?es=subscribe&es_email=fsdsf@dgd.com&es_name=&es_group=&timestamp=&action=0.9901232281510463";

        String resultToDisplay = "";

        InputStream in = null;
        try {

            URL url = new URL(urlString);

            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            in = new BufferedInputStream(urlConnection.getInputStream());


        } catch (Exception e) {

            System.out.println(e.getMessage());

            return e.getMessage();

        }

        try {
            resultToDisplay = in.toString();//IOUtils.toString(in, "UTF-8");
            //to [convert][1] byte stream to a string
            Log.v("Response",resultToDisplay);
        } catch (Exception e) {
            e.printStackTrace();
        }

代码执行,但什么也没发生,电子邮件id并没有添加到列表中


共 (2) 个答案

  1. # 1 楼答案

    我终于解决了这个问题。尽管我使用了正确的代码发送POST请求,但我无法订阅电子邮件id。我检查了请求的HTTP响应,发现它返回了错误“意外错误”。我签入了服务器代码,在php代码中有这样一个检查HTTP_REFERER的条件。所以做了一些研究,在我的java请求中添加了REFERER,瞧,成功了

    URL url = new URL(urlString);
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
     //Set to POST
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.setDoInput(true);
    //Added referer
    connection.addRequestProperty("REFERER", "http://thetechguru.in");
    connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
    connection.setReadTimeout(10000);
    Writer writer = new OutputStreamWriter(connection.getOutputStream());
    writer.write(query);
    writer.flush();
    writer.close();
    

    我希望它能帮助别人

  2. # 2 楼答案

    您的应用程序清单文件是什么样子的?如果您的应用程序没有访问internet的权限,它将不会。请尝试将<uses-permission android:name="android.permission.INTERNET" />添加到AndroidMainfest.xml文件中(在<manifest>标记内,但在<application>标记之前)

    日志中是否显示任何内容(log.v仅在设置为verbose时显示)?如果是,请分享它所显示的内容Log guide

    如果没有做到这一点,那就是电子邮件=fsdsf@dgd.com电子邮件已在列表中?确保您正在更新按钮上URL字符串的es_email参数