Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
curl-T的Java替代方案_Java_Http_Post_Curl - Fatal编程技术网

curl-T的Java替代方案

curl-T的Java替代方案,java,http,post,curl,Java,Http,Post,Curl,在拍照之前,我必须使用java将一个文本字符串发送到IP网络摄像头。所以,在我阅读了相机用户手册并在谷歌上搜索之后,我发现唯一的一件事就是使用cURL。我安装了它,运行正常,一切正常,文件中的文本显示在视频流中。命令是这样的 curl-T test.xml test.xml的内容是: <TextOverlay xmlns="http://www.hikvision.com/ver10/XMLSchema" version="1.0"> <id>2</id>

在拍照之前,我必须使用java将一个文本字符串发送到IP网络摄像头。所以,在我阅读了相机用户手册并在谷歌上搜索之后,我发现唯一的一件事就是使用cURL。我安装了它,运行正常,一切正常,文件中的文本显示在视频流中。命令是这样的 curl-T test.xml test.xml的内容是:

<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>

2.
真的
5.
5.
此处文本
所以我想用Java发送这些内容,我已经尝试过使用post和Java.net,但我得到一个错误“服务器返回HTTP响应代码:403 for URL”

这是我的密码:

 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;
}
System.out.println(“开始…”);
URL=新URL(“http://192.168.0.1/Video/inputs/channels/2/overlays/text/2/");
字符串数据=“\n”
+“2\n”
+“正确\n”
+“5\n”
+“5\n”
+“此处为文本\n”
+ "";
HttpURLConnection httpConnection=prepareConn(url,null,“admin”,“pass”);
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
setRequestMethod(“POST”);
httpConnection.setRequestProperty(“内容类型”、“文本/xml”);
OutputStreamWriter out=新的OutputStreamWriter(httpConnection.getOutputStream());
输出。写入(数据);
out.flush();
out.close();
System.out.println(“打印…”);
System.out.println(httpConnection.getResponseCode());
System.out.println(httpConnection.getResponseMessage());
InputStreamReader=新的InputStreamReader(httpConnection.getInputStream());
StringBuilder buf=新的StringBuilder();
char[]cbuf=新字符[2048];
int-num;
而(-1!=(num=reader.read(cbuf)))
{
追加(cbuf,0,num);
}
字符串结果=buf.toString();
System.out.println(“\n POST后从服务器收到的响应”+结果);
}
静态私有HttpURLConnection prepareConn(最终URL、属性请求、字符串用户名、字符串密码)引发错误,IOException
{
System.out.println(“授权……”);
如果(!url.getProtocol().equalsIgnoreCase(“http”))
抛出新错误(url.toString()+“不是HTTP!”);
最终的HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接设置连接超时(300);
conn.setRequestMethod(“POST”);
最终属性默认值_请求_道具=新属性();
默认请求属性集合属性(“字符集”、“utf-8”);
最终属性道具=新属性(默认请求道具);
如果(请求道具!=null)
for(最终字符串名称:request_props.stringPropertyNames())
props.setProperty(名称,请求_props.getProperty(名称));
for(最终字符串名称:props.stringPropertyNames())
conn.setRequestProperty(名称,props.getProperty(名称));
if(null!=用户名和null!=密码)
conn.setRequestProperty(“授权”、“基本”+新BASE64Encoder().encode((用户名+):“+密码).getBytes());
返回连接;
}
希望有人能帮忙:)
祝你一切顺利

我只是使用了错误的
RequestMethod
,经过深入研究,我发现我必须使用PUT而不是POST-request。现在只需将
setRequestMethod(“POST”)
更改为
setRequestMethod(“PUT”)
,就可以了

嘿,谢谢——我正在做与你完全相同的事情,这非常有用!来自另一位海康威视用户的干杯!