2014-09-24 59 views
5
發送短信

我嘗試使用下面的代碼發送短信:「服務器返回的HTTP響應代碼:400」試圖在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 !!"); 

    } 

} 

但是,當我運行這段代碼,我得到以下錯誤:

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) 
+0

http://stackoverflow.com/q/9349703。看起來最可能的原因是您發送格式不正確的網址。檢查你發送的URL,並確保它是正確的。 – 2014-09-24 18:15:52

+0

@Robert 你好,謝謝。我查了網址,它的正確。我仍然無法發送短信。 – 2014-09-25 07:34:39

+0

'http://www.way2sms.com/FirstServletsms?custid ='對我來說看起來不像一個有效的網址。最重要的是,你似乎忘記了在同一段代碼中使用'content'。 – 2015-06-02 06:02:32

回答

0

你是不是有問題,第一個,但它似乎是您發送的網址,或者您發送的數據,是不正確。

一些建議發現here

  • 使用Apache下議院HTTP客戶端
  • 看看是否這不可能是因爲在你身邊的代理(從別的地方試試)
  • 嘗試使用GET代替的POST
相關問題