2015-09-17 34 views
1

我必須發送一個文本字符串使用Java到IP網絡攝像頭,然後拍照。所以,當我閱讀相機用戶手冊並在谷歌搜索後,我發現唯一使用cURL。我安裝它並運行正常,並且一切正常,文件中的文本出現在視頻流中。該命令是這個 捲曲-T的test.xml http://admin:[email protected]/Video/inputs/channels/2/overlays/text/2 和的test.xml的內容是:curl的Java替代-T

<TextOverlay xmlns="http://www.hikvision.com/ver10/XMLSchema" version="1.0"> 
<id>2</id> 
<enabled>true</enabled> 
<posX>5</posX> 
<posY>5</posY> 
<message>Text here </message> 
</TextOverlay> 

所以我想用Java來發送這個內容,我使用後和已經嘗試過java.net但我得到一個錯誤「服務器返回的HTTP響應代碼:403網址」

這裏是我的代碼:

System.out.println("Starting......"); 
URL url = new URL("http://192.168.0.1/Video/inputs/channels/2/overlays/text/2/"); 
String data = "<TextOverlay xmlns=\"http://www.hikvision.com/ver10/XMLSchema\" version=\"1.0\">\n" 
    + "<id>2</id>\n" 
    + "<enabled>true</enabled>\n" 
    + "<posX>5</posX>\n" 
    + "<posY>5</posY>\n" 
    + "<message>Text here</message>\n" 
    + "</TextOverlay>"; 
HttpURLConnection httpConnection = prepareConn(url, null, "admin", "pass"); 
httpConnection.setDoOutput(true); 
httpConnection.setDoInput(true); 
httpConnection.setRequestMethod("POST"); 
httpConnection.setRequestProperty ("Content-Type", "text/xml"); 
OutputStreamWriter out = new OutputStreamWriter(httpConnection.getOutputStream()); 
out.write(data); 
out.flush(); 
out.close(); 
System.out.println("Printing......"); 
System.out.println(httpConnection.getResponseCode()); 
System.out.println(httpConnection.getResponseMessage()); 
InputStreamReader reader = new InputStreamReader(httpConnection.getInputStream()); 
StringBuilder buf = new StringBuilder(); 
char[] cbuf = new char[2048]; 
int num; 

while(-1 != (num = reader.read(cbuf))) 
{ 
    buf.append(cbuf, 0, num); 
} 

String result = buf.toString(); 
System.out.println("\nResponse received from server after POST" + result); 
} 


static private HttpURLConnection prepareConn(final URL url, Properties request_props, String username, String password) throws Error, IOException 
{ 
System.out.println("Authorization......"); 
if (!url.getProtocol().equalsIgnoreCase("http")) 
    throw new Error(url.toString() + " is not HTTP!"); 

final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setConnectTimeout(300); 
conn.setRequestMethod("POST"); 

final Properties DEFAULT_REQUEST_PROPS = new Properties(); 
DEFAULT_REQUEST_PROPS.setProperty("charset", "utf-8"); 

final Properties props = new Properties(DEFAULT_REQUEST_PROPS); 
if (request_props != null) 
    for (final String name : request_props.stringPropertyNames()) 
    props.setProperty(name, request_props.getProperty(name)); 

for (final String name : props.stringPropertyNames()) 
    conn.setRequestProperty(name, props.getProperty(name)); 
if(null != username && null != password) 
    conn.setRequestProperty("Authorization", "Basic " + new BASE64Encoder().encode((username+":"+password).getBytes())); 
return conn; 
} 

希望有人能幫助:) 一將最好的!

回答

1

我只是使用錯誤的RequestMethod,經過深入研究,我發現我必須放棄POST請求。現在只需更改setRequestMethod(「POST」)ÂsetRequestMethod(「PUT」)並像魅力一樣工作。

+0

嘿謝謝 - 我和你做的事情完全一樣,而且非常有用!來自另一位海康威視用戶的歡呼聲! –