java中http請求外部接口的時候傳遞sql語句過程記錄

第一次做這種對接外部(第三方)接口的開發。記錄一下:

介於保密的原因,外部接口就不公開了。我的需求是根據第三方提供的接口,查詢數據。但是我的請求是包含了sql語句的。類似於下面這樣的URL:

http://X.X.X.X/tb/re?select * from table where name='zhangsan'

?前面的是他們提供的接口。後面是我傳的sql語句,當然還需要你的用戶名密碼或者token。根據這個需求python可能幾行代碼就能搞定了,但是我使用的java,這個時候就感受到了python的簡潔。

參考代碼如下:

說明:

1.QUERYTB是我們的外部接口。

2.sql是我們要寫的sql語句。

3.我沒使用用戶名密碼登錄,使用的是token所以換成token即可。

4.使用GET請求

package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import javax.swing.text.AbstractDocument.Content;
import com.fasterxml.jackson.core.JsonParser;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.IOException;

public class T {
 static String QUERY_TB = "http://。。。。";//外部接口
 static String QUERY_SQL = "?sql=。。。。";
 static String para="&access_token=。。。。。。。";
 static String uid = "123321456";

 public static void main(String[] args) {
  try {
   String u="512571";
    JSONArray j=test1(u).getJSONArray("data");
    for (int i =0;i<j.size();i++)
    {
     JSONArray oo=	(JSONArray) j.get(i);
    String one= (String) oo.get(0);
    String two= (String) oo.get(1);
    String three= (String) oo.get(2);
     System.out.println("1"+one+"2"+two+"3"+three);
     break;
    }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }



 public static JSONObject test1(String UID) throws IOException {
   URL url = new URL(QUERY_TB + QUERY_SQL+UID+para);
   HttpURLConnection connection = (HttpURLConnection) url.openConnection();
   connection.setRequestMethod("GET"); // 設置請求方式
   connection.setConnectTimeout(15000);
   connection.connect();
   BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
   String line = null;
   StringBuilder result = new StringBuilder();
   while ((line = br.readLine()) != null) { // 讀取數據
    result.append(line);
   }
   br.close();
   connection.disconnect();
   JSONObject jsondata = JSONObject.fromObject(result.toString());
   return jsondata;
 }

這裏面也遇到了很多的問題:

1,就是我們發送請求的時候,不能像在寫sql的時候來寫sql語句,比如 select * from table,我們可以看到語句中出現了空格,在我們發送URL請求的時候是不能這麼寫的,如果這樣寫的話,就會報一個400的錯誤,400狀態碼就意味這服務器不能夠了解我們的URL地址,也就是我們URL地址出現錯誤。有人可能就問,爲什麼我同樣把相同的連接粘入到瀏覽器爲什麼能正常訪問接口裏的數據呢?究其原因是我們在使用瀏覽器訪問我們的URL的時候,會自動幫我們把空格去掉,所以能正常訪問。

那我們怎麼把連接放入到我們的URL請求裏呢?我們按照正常的寫法來寫sql語句,但是在出現空格的地方我們使用20%來填補空格,然後再傳進去就可以了,如果需要用到單引號,我們是使用27%來代替的,如果出現上面那個錯誤,最笨的方法就是把連接粘貼到瀏覽器,瀏覽器就自動給我們替補上對應的佔位符來填補不同的字符。

2,怎麼取到裏面的數據就參考代碼吧,我這個還是有點困難的,因爲返回的不是json數據,也簡單做了一下處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章