當前位置:首頁 » 編程語言 » java請求url

java請求url

發布時間: 2023-07-12 07:36:23

java獲取URL

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class GetLinks {
private String webSource;
private String url;

public GetLinks(String url) throws MalformedURLException, IOException {
this.url = Complete(url);
webSource = getWebCon(this.url);
}

private String getWebCon(String strURL) throws MalformedURLException,
IOException {
StringBuffer sb = new StringBuffer();
java.net.URL url = new java.net.URL(strURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream()));
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
return sb.toString();
}

private String Complete(String link)throws MalformedURLException{
URL url1 = new URL(link);
URL url2 = new URL(link+"/");
String handledUrl = link;
try{
StringBuffer sb1 = new StringBuffer();
BufferedReader in1 = new BufferedReader(new InputStreamReader(url1
.openStream()));
String line1;
while ((line1 = in1.readLine()) != null) {
sb1.append(line1);
}
in1.close();

StringBuffer sb2 = new StringBuffer();
BufferedReader in2 = new BufferedReader(new InputStreamReader(url2
.openStream()));
String line2;
while ((line2 = in2.readLine()) != null) {
sb2.append(line2);
}
in1.close();

if(sb1.toString().equals(sb2.toString())){
handledUrl = link+"/";
}
}catch(Exception e){
handledUrl = link;
}
return handledUrl;

}

/**
* 處理鏈接的相對路徑
* @param link 相對路徑或絕對路徑
* @return 絕對路徑
*/
private String urlHandler(String link) {
if (link == null)
return null;
link = link.trim();

if (link.toLowerCase().startsWith("http://")
|| link.toLowerCase().startsWith("https://")) {
return link;
}
String pare = url.trim();
if (!link.startsWith("/")) {
if (pare.endsWith("/")) {
return pare + link;
}

if (url.lastIndexOf("/") == url.indexOf("//") + 1 || url.lastIndexOf("/") == url.indexOf("//") + 2) {
return pare + "/" + link;
} else {
int lastSeparatorIndex = url.lastIndexOf("/");
return url.substring(0, lastSeparatorIndex + 1) + link;
}
}else{
if (url.lastIndexOf("/") == url.indexOf("//") + 1 || url.lastIndexOf("/") == url.indexOf("//") + 2) {
return pare + link;
}else{
return url.substring(0,url.indexOf("/", url.indexOf("//")+3)) + link;
}
}
}

public List<String> getAnchorTagUrls() {
if (webSource == null) {
System.out.println("沒有網頁源代碼");
return null;
}
ArrayList<String> list = new ArrayList<String>();
int index = 0;
while (index != -1) {
index = webSource.toLowerCase().indexOf("<a ", index);
if (index != -1) {
int end = webSource.indexOf(">", index);
String str = webSource.substring(index, end == -1 ? webSource
.length() : end);
str = str.replaceAll("\\s*=\\s*", "=");
if (str.toLowerCase().matches("^<a.*href\\s*=\\s*[\'|\"]?.*")) {// "^<a\\s+\\w*\\s*href\\s*=\\s*[\'|\"]?.*"
int hrefIndex = str.toLowerCase().indexOf("href=");
int leadingQuotesIndex = -1;
if ((leadingQuotesIndex = str.indexOf("\"", hrefIndex
+ "href=".length())) != -1) { // 形如<a
// href=".....">
int TrailingQuotesIndex = str.indexOf("\"",
leadingQuotesIndex + 1);
TrailingQuotesIndex = TrailingQuotesIndex == -1 ? str
.length() : TrailingQuotesIndex;
str = str.substring(leadingQuotesIndex + 1,
TrailingQuotesIndex);
str = urlHandler(str);
list.add(str);
System.out.println(str);
index += "<a ".length();
continue;
}

if ((leadingQuotesIndex = str.indexOf("\'", hrefIndex
+ "href=".length())) != -1) { // 形如<a
// href='.....'>
int TrailingQuotesIndex = str.indexOf("\'",
leadingQuotesIndex + 1);
TrailingQuotesIndex = TrailingQuotesIndex == -1 ? str
.length() : TrailingQuotesIndex;
str = str.substring(leadingQuotesIndex + 1,
TrailingQuotesIndex);
str = urlHandler(str);
System.out.println(str);
list.add(str);
index += "<a ".length();
continue;
}

int whitespaceIndex = str.indexOf(" ", hrefIndex
+ "href=".length()); // 形如<a href=
// http://www..com >
whitespaceIndex = whitespaceIndex == -1 ? str.length()
: whitespaceIndex;
str = str.substring(hrefIndex + "href=".length(),
whitespaceIndex);
str = urlHandler(str);
list.add(str);
System.out.println(str);

}
index += "<a ".length();
}
}
return list;
}

public static void main(String[] args) throws Exception {
GetLinks gl = new GetLinks("http://www..com");
List<String> list = gl.getAnchorTagUrls();
for(String str:list) {
System.out.println(str);
}
}
}

Ⅱ java解析出url請求的路徑和參數鍵值對類

解析url,本想用正則表達式處理,但正則表達式速度較慢。用split處理一下就可以了。

packageRequestPackage;
importjava.util.HashMap;
importjava.util.Map;
publicclassCRequest{
/**
*解析出url請求的路徑,包括頁面
*@paramstrURLurl地址
*@returnurl路徑
*/
publicstaticStringUrlPage(StringstrURL)
{
StringstrPage=null;
String[]arrSplit=null;

strURL=strURL.trim().toLowerCase();

arrSplit=strURL.split("[?]");
if(strURL.length()>0)
{
if(arrSplit.length>1)
{
if(arrSplit[0]!=null)
{
strPage=arrSplit[0];
}
}
}

returnstrPage;
}
/**
*去掉url中的路徑,留下請求參數部分
*@paramstrURLurl地址
*@returnurl請求參數部分
*/
(StringstrURL)
{
StringstrAllParam=null;
String[]arrSplit=null;

strURL=strURL.trim().toLowerCase();

arrSplit=strURL.split("[?]");
if(strURL.length()>1)
{
if(arrSplit.length>1)
{
if(arrSplit[1]!=null)
{
strAllParam=arrSplit[1];
}
}
}

returnstrAllParam;
}
/**
*解析出url參數中的鍵值對
*如"index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
*@paramURLurl地址
*@returnurl請求參數部分
*/
publicstaticMap<String,String>URLRequest(StringURL)
{
Map<String,String>mapRequest=newHashMap<String,String>();

String[]arrSplit=null;

StringstrUrlParam=TruncateUrlPage(URL);
if(strUrlParam==null)
{
returnmapRequest;
}
//每個鍵值為一組www.2cto.com
arrSplit=strUrlParam.split("[&]");
for(StringstrSplit:arrSplit)
{
String[]arrSplitEqual=null;
arrSplitEqual=strSplit.split("[=]");

//解析出鍵值
if(arrSplitEqual.length>1)
{
//正確解析
mapRequest.put(arrSplitEqual[0],arrSplitEqual[1]);

}
else
{
if(arrSplitEqual[0]!="")
{
//只有參數沒有值,不加入
mapRequest.put(arrSplitEqual[0],"");
}
}
}
returnmapRequest;
}

}

測試類


packageRequestPackage;
importjava.util.Map;
publicclassTestCRequest{
/**用於測試CRequest類
*@paramargs
*/
publicstaticvoidmain(String[]args){
//請求url
Stringstr="index.jsp?Action=del&id=123&sort=";

//url頁面路徑
System.out.println(CRequest.UrlPage(str));

//url參數鍵值對
StringstrRequestKeyAndValues="";
Map<String,String>mapRequest=CRequest.URLRequest(str);

for(StringstrRequestKey:mapRequest.keySet()){
StringstrRequestValue=mapRequest.get(strRequestKey);
strRequestKeyAndValues+="key:"+strRequestKey+",Value:"+strRequestValue+";";

}
System.out.println(strRequestKeyAndValues);

//獲取無效鍵時,輸出null
System.out.println(mapRequest.get("page"));
}
}


測試代碼運行效果

index.jsp
key:id,Value:123;key:sort,Value:;key:action,Value:del;
null

Ⅲ 用java怎麼寫URL介面

在java中,調用http請求介面,主要通過流的方式進行調用,示例介面如下:
/**
* 程序中訪問http數據介面
*/
public String searchLoginService(String urlStr) {

/** 網路的url地址 */
URL url = null;

/** http連接 */
HttpURLConnection httpConn = null;

/**//** 輸入流 */
BufferedReader in = null;
StringBuffer sb = new StringBuffer();
try{
url = new URL(urlStr);
in = new BufferedReader( new InputStreamReader(url.openStream(),"UTF-8") );
String str = null;
while((str = in.readLine()) != null) {
sb.append( str );
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
} finally{
try{
if(in!=null) {
in.close();
}
}catch(IOException ex) {
logger.error(ex.getMessage(), ex);
}
}
String result =sb.toString();
System.out.println(result);
return result;
}

Ⅳ java獲取伺服器文件,怎樣用url返回

下面提供二種方法會使用java發送url請求,並獲取伺服器返回的值

第一種方法:
代碼如下:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;

(StringurlStr,Stringparam1,Stringparam2)throwsException{
StringtempStr=null;
HttpClienthttpclient=newDefaultHttpClient();
Propertiesproperties=newProperties();
HttpEntityentity=null;
StringxmlContent="";
try
{

//設置超時時間
httpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,20000);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,20000);

//封裝需要傳遞的參數
List<NameValuePair>nvps=newArrayList<NameValuePair>();
nvps.add(newBasicNameValuePair("mainMemoCode",strmainMemoCode));
nvps.add(newBasicNameValuePair("recordPassWord",strrecordPassWord));
//客戶端的請求方法類型
HttpPosthttpPost=newHttpPost(urlStr);
httpPost.setEntity(newUrlEncodedFormEntity(nvps,"GBK"));
HttpResponseresponse=httpclient.execute(httpPost);

//獲取伺服器返回Http的Content-Type的值
tempStr=response.getHeaders("Content-Type")[0].getValue().toString();

//獲取伺服器返回頁面的值
entity=response.getEntity();
xmlContent=EntityUtils.toString(entity);
Stringstrmessage=null;
System.out.println(xmlContent);
System.out.println(response.getHeaders("Content-Type")[0].getValue().toString());
httpPost.abort();

}
catch(SocketTimeoutExceptione)
{
}
catch(Exceptionex)
{
ex.printStackTrace();
}
finally{
httpclient.getConnectionManager().shutdown();
}
第二種方法:

代碼如下:


(StringurlStr,Stringparam1,Stringparam2)throwsException{

HttpURLConnectionurl_con=null;
try{
URLurl=newURL(urlStr);
StringBufferbankXmlBuffer=newStringBuffer();
//創建URL連接,提交到數據,獲取返回結果
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("User-Agent","directclient");

PrintWriterout=newPrintWriter(newOutputStreamWriter(connection.getOutputStream(),"GBK"));
out.println(param);
out.close();
BufferedReaderin=newBufferedReader(newInputStreamReader(connection
.getInputStream(),"GBK"));

StringinputLine;

while((inputLine=in.readLine())!=null){
bankXmlBuffer.append(inputLine);
}
in.close();
tempStr=bankXmlBuffer.toString();
}
catch(Exceptione)
{
System.out.println("發送GET請求出現異常!"+e);
e.printStackTrace();

}finally{
if(url_con!=null)
url_con.disconnect();
}

returntmpeStr;
}

總結:多練習代碼,熟練之後才能更快速的去了解代碼的學習的方法。多去獲取一些思維方面的書籍可以看看。

Ⅳ java獲取請求前的前兩次訪問url,該怎麼獲取

在HTTP的request對象中,可以取到HTTP頭HEADER,其中有一個是"Referer",通過它,我們可以知道上上個請求的URL,這在某些場合中相當有用.
如在一個列表頁中,通常會有一個刪除鏈接,刪除列表中的某項數據,如果希望刪除成功後再返回到該列表頁,可以如下做法:
java 代碼
String retUrl = request.getHeader("Referer");
if(retUrl != null){
response.sendRedirect(retUrl);
}
就這么簡單,就可以了.
對於添加和編輯操作,同樣可以這樣做,只是稍微變通一下,要傳一次從上個頁面中獲取的Referer.

Ⅵ java request 如何取到發送請求的地址是什麼

request對象通過以下方法來獲取請求路徑,如下所示:
String getServerName():獲取伺服器名,localhost;
String getServerPort():獲取伺服器埠號,8080;
String getContextPath():獲取項目名,/Example;
String getServletPath():碰舉獲取Servlet路譽態徑,/AServlet;
String getQueryString():獲取參數部分,即問號後面的部笑虛碧分:username=zhangsan
String getRequestURI():獲取請求URI,等於項目名+Servlet路徑:/Example/AServlet
String getRequestURL():獲取請求URL,等於不包含參數的整個請求路徑:http://localhost:8080/Example/AServlet 。

Ⅶ 關於java調用url介面方法的問題

對於具體的數據請求方式、請求方式、響應數據格式要看你的介面要求,這是通用代碼:

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.net.HttpURLConnection;
importjava.net.URL;

publicclassTest{
publicstaticvoidmain(String[]args)throwsIOException{
System.out.println(getData());
}
publicstaticStringgetData()throwsIOException{
//創建指定url的url對象,這里的地址是:淘寶商品搜索建議
URLurl=newURL("https://suggest.taobao.com/sug?code=utf-8&q=電腦&callback=cb");
//創建http鏈接對象
HttpURLConnectioncon=(HttpURLConnection)url.openConnection();
//設置請求方式
con.setRequestMethod("POST");
//打開鏈接,上一步和該步驟作用相同,可以省略
con.connect();

//獲取請求返回內容並設置編碼為UTF-8
BufferedReaderreader=newBufferedReader(newInputStreamReader(con.getInputStream(),"UTF-8"));
//將返回數據拼接為字元串
StringBuffersb=newStringBuffer();
//臨時字元串
Stringtemp=null;
//獲取數據
while((temp=reader.readLine())!=null){
sb.append(temp);
}
//關閉流
reader.close();
returnsb.toString();
}
}

結果:

Ⅷ java中 如何獲取客戶端請求的url

在servlet中的request對象中有url,可以用方法 getRequestURI().
如果在程序中得不到該請求的request對象 那就得不到。

所以得到url的 關鍵是 先得到 request

熱點內容
抽獎源碼帶後台 發布:2025-02-08 20:33:54 瀏覽:225
歐博中央空調原始密碼是多少 發布:2025-02-08 20:33:47 瀏覽:335
運動使人快樂緩解壓力 發布:2025-02-08 20:27:01 瀏覽:98
linux命令大文件 發布:2025-02-08 20:25:06 瀏覽:897
C蟻群演算法 發布:2025-02-08 20:21:25 瀏覽:513
私人搭建伺服器能幹嘛 發布:2025-02-08 20:21:24 瀏覽:596
網吧怎麼通過伺服器玩網路游戲 發布:2025-02-08 19:59:52 瀏覽:914
文檔編輯加密 發布:2025-02-08 19:56:31 瀏覽:392
phpmysql存儲過程實例 發布:2025-02-08 19:54:40 瀏覽:161
淘寶賣的地下城腳本 發布:2025-02-08 19:41:40 瀏覽:63