尝试使用Java发送SMS时,"服务器返回HTTP响应代码:400"

Sub*_*ive 5 java

我正在尝试使用以下代码发送短信:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Vector;

public class SMS {

    public static void send(String uid, String pwd, String phone, String msg)
            throws Exception {

        if ((uid == null) || (uid.length() == 0)) {
            throw new IllegalArgumentException("User ID should be present.");
        }

        uid = URLEncoder.encode(uid, "UTF-8");

        if ((pwd == null) || (pwd.length() == 0)) {
            throw new IllegalArgumentException("Password should be present.");
        }

    pwd = URLEncoder.encode(pwd, "UTF-8");

        if ((phone == null) || (phone.length() == 0)) {
            throw new IllegalArgumentException(
                    "At least one phone number should be present.");
        }

    if ((msg == null) || (msg.length() == 0)) {
            throw new IllegalArgumentException("SMS message should be present.");
        }

        msg = URLEncoder.encode(msg, "UTF-8");

        Vector<Long> numbers = new Vector<Long>();

        if (phone.indexOf(59) >= 0) {
            String[] pharr = phone.split(";");
            for (String t : pharr)
                try {
                    numbers.add(Long.valueOf(t));
                } catch (NumberFormatException ex) {
                    throw new IllegalArgumentException(
                            "Give proper phone numbers.");
                }
        } else {
            try {
                numbers.add(Long.valueOf(phone));
            } catch (NumberFormatException ex) {
                throw new IllegalArgumentException("Give proper phone numbers.");
            }
        }

        if (numbers.size() == 0) {
            throw new IllegalArgumentException(
                    "At least one proper phone number should be present to send SMS.");
        }
        String temp = "";
        String content = "username=" + uid + "&password=" + pwd;
        URL u = new URL("http://www.way2sms.com/auth.cl");
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();
        uc.setDoOutput(true);
        uc.setRequestProperty(
                "User-Agent",
                "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
        uc.setRequestProperty("Content-Length",
                String.valueOf(content.length()));
        uc.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        uc.setRequestProperty("Accept", "*/*");
        uc.setRequestProperty("Referer", "http://www.way2sms.com//entry.jsp");
        uc.setRequestMethod("POST");
        uc.setInstanceFollowRedirects(false);

        PrintWriter pw = new PrintWriter(new OutputStreamWriter(
                uc.getOutputStream()), true);
        pw.print(content);
        pw.flush();
        pw.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(
                uc.getInputStream()));

        while ((temp = br.readLine()) != null) {
            System.out.println(temp);
        }

        String cookie = uc.getHeaderField("Set-Cookie");

        u = null;
        uc = null;
        for (Iterator<Long> localIterator = numbers.iterator(); localIterator
                .hasNext();) {
            long num = ((Long) localIterator.next()).longValue();

            content = "custid=undefined&HiddenAction=instantsms&Action=custfrom450000&login=&pass=&MobNo="
                    + num + "&textArea=" + msg;
            u = new URL("http://www.way2sms.com/FirstServletsms?custid=");
            uc = (HttpURLConnection) u.openConnection();
            uc.setDoOutput(true);
            uc.setRequestProperty(
                    "User-Agent",
                    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
            uc.setRequestProperty("Content-Length",
                    String.valueOf(content.getBytes().length));
            uc.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            uc.setRequestProperty("Accept", "*/*");
            uc.setRequestProperty("Cookie", cookie);
            uc.setRequestMethod("POST");
            uc.setInstanceFollowRedirects(false);
            pw = new PrintWriter(new OutputStreamWriter(uc.getOutputStream()),
                    true);
            pw.print(content);
            pw.flush();
            pw.close();
            br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
            while ((temp = br.readLine()) != null)
                ;
            br.close();
            u = null;
            uc = null;
        }

        u = new URL("http://wwwa.way2sms.com/jsp/logout.jsp");
        uc = (HttpURLConnection) u.openConnection();
        uc.setRequestProperty(
                "User-Agent",
                "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
        uc.setRequestProperty("Accept", "*/*");
        uc.setRequestProperty("Cookie", cookie);
        uc.setRequestMethod("GET");
        uc.setInstanceFollowRedirects(false);
        br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        while ((temp = br.readLine()) != null)
            ;
        br.close();
        u = null;
        uc = null;
    }

    public static void main(String args[]) throws Exception {
        //SMS s = new SMS();
        SMS.send("9999999999", "password", "8888888888", "Hi How Are u !!");

    }

}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我收到以下错误:

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 400 for URL: http://www.way2sms.com/FirstServletsms?custid=XXXXXXXXX
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
    at SMS.send(SMS.java:115)
    at SMS.main(SMS.java:142)
Run Code Online (Sandbox Code Playgroud)

Vic*_*yew 0

您不是第一个遇到此问题的人,但您发送的 URL 或发送的数据似乎不正确。

一些建议在这里找到:

  • 使用 Apache Commons HTTP 客户端
  • 看看这是否是由于您这边的代理造成的(从其他地方尝试)
  • 尝试使用 GET 而不是 POST