【问题标题】:Sending sms via java通过java发送短信
【发布时间】:2012-02-09 08:53:02
【问题描述】:

我将通过 java 发送短信。问题是短信网关要求我以这种格式发送

http://push1.maccesssmspush.com/servlet/com.aclwireless.pushconnectivity.listen
ers.TextListener?userId=xxxxx&pass=xxxx&appid=xxxx&subappid=xxxx&msgtyp
e=1&contenttype=1&selfid=true&to=9810790590,9810549717&from=ACL&dlrre
q=true&text=This+is+a+test+msg+from+ACL&alert=

问题是如何从 java 应用程序调用它是可能的还是需要特殊的库?使用 HttpURLConnection 会完成这项工作吗?谢谢。

我在下面完成的示例代码是正确的。

URL sendSms1 = new URL("http://push1.maccesssmspush.com/servlet/com.aclwireless.pushconnectivity.listen
    ers.TextListener?userId=xxxxx&pass=xxxx&appid=xxxx&subappid=xxxx&msgtyp
    e=1&contenttype=1&selfid=true&to=9810790590,9810549717&from=ACL&dlrre
    q=true&text=This+is+a+test+msg+from+ACL&alert=");

URLConnection smsConn1 =
    sendSms1.openConnection();

【问题讨论】:

    标签: java sms


    【解决方案1】:

    这只是一个 HTTP 调用,在 Java(或任何现代语言,我希望)中不需要任何特殊的东西。只需根据需要构建字符串*,然后向该 URL 发出 HTTP 请求。

    如果您需要了解如何在 Java 中执行请求部分的基础知识,请查看 Sun 教程 Reading from and Writing to a URLConnection。这使用了内置类,我相信有几十个库也以时髦和/或方便的方式处理连接,所以如果你熟悉的话,一定要使用其中的一个。

    *您可能没有想到的一个潜在问题 - 您的查询字符串参数必须是 URL 编码的。因此,例如text 参数中的+ 字符是编码的空格(在URL 中具有不同的含义)。同样,如果您想在其中一个参数中发送? 字符,它必须显示为%3F。查看HTTP URL Address Encoding in Java 的已接受答案,了解如何安全构建 URL 字符串的示例。

    【讨论】:

    • @Doyle 我已经更新了一些代码,你能验证这是否合理吗?
    【解决方案2】:

    它看起来像一个简单的 GET 请求,您可以使用 Apache HttpClient 库来执行这样的请求。在此处查看 Vogella 的教程:http://www.vogella.de/articles/ApacheHttpClient/article.html 以获取示例源代码和说明。

    【讨论】:

      【解决方案3】:

      你可以尝试使用java.net.URL库。

      喜欢这个

      // at this before you need to generate the urlString as "http://push1.maccesssmspush.com/servlet/com.aclwireless.pushconnectivity.listen
      ers.TextListener?userId=xxxxx&pass=xxxx&appid=xxxx&subappid=xxxx&msgtyp
      e=1&contenttype=1&selfid=true&to=9810790590,9810549717&from=ACL&dlrre
      q=true&text=This+is+a+test+msg+from+ACL&alert="
      
      URL url = new URL(urlString);
      // send sms
      URLConnection urlConnection = url.openConnection();// open the url
      // and you, also can get the feedback if you want
      BufferedReader br = new BufferedReader(new InputStreamReader(
      urlConnection.getInputStream()));
      

      【讨论】:

      • 是的,我需要获取交付状态,bufferedreader 将如何提供帮助。作为 url 的一部分,我需要发送 dlrreq=true 以便获得交付状态。
      【解决方案4】:
      URL url = new URL("http://smscountry.com/SMSCwebservice.asp");
      HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
      

      [编辑]

      urlconnection.setRequestMethod("POST"); 
      urlconnection.setRequestProperty("Content-Type","application/x-www-form-urlenc‌​oded");     
      urlconnection.setDoOutput(true); 
      
      OutputStreamWriter out = new OutputStreamWriter(urlconnection.getOutputStream());
      out.write(postData); 
      out.close(); 
      
      BufferedReader in = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
      
      String decodedString; 
      
      while ((decodedString = in.readLine()) != null) { 
        retval += decodedString; 
      }
      

      【讨论】:

      • 如果我需要在调用 openConnection 后等待一些传递状态消息,有什么方法可以解决吗?
      • 我不这么认为。它只是简单的异步 HTTP 请求。你可以像这样阅读输出urlconnection.setRequestMethod("POST"); urlconnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); urlconnection.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(urlconnection.getOutputStream()); out.write(postData); out.close(); BufferedReader in = new BufferedReader( new InputStreamReader(urlconnection.getInputStream())); String decodedString; while ((decodedString = in.readLine()) != null) { retval += decodedString; }
      • 请学习如何格式化代码块,然后将那乱七八糟的代码(在评论中)编辑到答案中。
      • @Andrew Thompson:我猜你不能在评论中添加新行
      • 不,您不能,但是您在答案中用于代码的格式样式也是错误的,双 ` 只是使文本显示为带有灰色 BG 的固定宽度字体。将行缩进 4 个字符会产生更好的外观。尝试以两种方式重新编辑原始文本并并排比较它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多