这里有点奇怪,我有一个闭路电视系统并联系制造商询问是否有API。答案是否定的。
我一直在努力了解如何拍摄现场jpeg图片并在我自己的应用程序中使用它(c#)。
这是指向显示实时Feed的实时视图页面的链接; http://pastebin.com/jCp4jZRh
我感兴趣的是
img_buf [0] .src =“ivop.get?action = live& piccnt = 0& THREAD_ID =”+ thd_id;
现在piccnt似乎是为了阻止浏览器缓存数据,所以这个数字不断变化,thd_id似乎是频道号。当试图访问这个时,我得到以下消息;
身份验证错误:拒绝访问,身份验证错误
即使我先登录,然后使用我自己的意见尝试上述网址,我仍会检索拒绝访问的消息。
继承人登录页面的来源; http://pastebin.com/q7nLJ4tk 继承人md5.js文件的来源; http://pastebin.com/du1ggaQB
我只是有点坚持如何验证然后显示Feed,有没有人有任何指针?
感谢
答案 0 :(得分:0)
鉴于可用的有限信息,最佳猜测:他们正在检查推荐人。您可以使用Fiddler检查请求的详细信息(您甚至可以使用略有不同的引荐来重播请求,确认是否发生了这种情况,等等)。如果是这样,您可以在HTTPWebRequest中设置引荐来源:http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.referer.aspx
答案 1 :(得分:0)
我回答了一个类似的问题,解决方案最后是你必须设置推荐人。
无论如何,要找到您的解决方案download a copy of Fiddler。
运行后,点击相机页面,您会看到多个请求。当您找到ivop.get的其中一个请求时,将其拖到请求构建器中并再次执行它。
如果第二次执行后它仍然有效(使用检查员检查),然后开始更改标题,逐个删除位,直到找到关键元素。我怀疑会有一个cookie,或者需要推荐人。
一旦找到了这些元素,就很容易在您的应用程序中提出适当的请求。
如果您可以发布实时网址,我可以为您提供帮助。
答案 2 :(得分:0)
有很多种可能性,如果无法访问CCTV服务器的源代码,很难说它可能是哪一种。
我建议弹出一个HTTP Header嗅探工具(例如firefox的https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/)并观察成功IMG请求的标头。然后使用netcat或curl重播该请求。一旦你有了这个工作,尝试一次删除一个HTTP头(你可能会发送某种会话ID,HTTP推荐者等 - 这些对CCTV服务器来说都很重要)
在任何情况下,至少您必须至少使用mlogin.get
进行身份验证并在后续请求中传递生成的会话ID。
答案 3 :(得分:0)
虽然这可能很旧-我有同样的问题。 DVR需要经过身份验证的登录名,并在第一次重定向到登录页面时在URL中发送一个密钥,并在hex_hmac_md5中输入密码。我有一个python函数来登录和检索两个通道图像,然后在下面注销:
def getcamimg():
baseurl = 'http://<IPADDRESS>/'
content = str(getUrl(baseurl))
x = re.search("key=(\w+)", content)
keystr = x.group(1)
key = bytes(keystr,'utf-8')
password = bytes(<YOURPASS>,'utf-8')
hmacobj = hmac.new(key,password)
hmacpass = hmacobj.hexdigest()
#-----------------------------------------------------
loginurl = baseurl + 'mlogin.get?account=<USERNAME>&passwd='+ str(hmacpass) + '&key=' + keystr + '&Submit=Login'
lcontent = str(getUrl(loginurl))
if("another administrator" in lcontent):
print("another admin online")
exit()
y = re.search('href="([\w\d\.\?=&_-]+)"',lcontent)
finalurl = baseurl + y.group(1)
z = re.search('id=(\w+)',lcontent)
thid = z.group(1)
#-----------------------------------------------------
imgurl = baseurl + "ivop.get?action=live&piccnt=1&THREAD_ID=" + thid
imgcontent = getUrl(imgurl)
ctime = datetime.datetime.today().strftime("%Y%m%d%H%M%S")
with open("chan1_"+ctime+".jpg", "wb") as file0:
file0.write(imgcontent)
#-----------------------------------------------------
chanset = "showch.set?channel=3&THREAD_ID=" + thid
getUrl(baseurl + chanset)
#-----------------------------------------------------
icontent1 = getUrl(imgurl)
with open("chan3_"+ctime+".jpg", "wb") as file1:
file1.write(icontent1)
#-----------------------------------------------------
logout = "Forcekick.set?ITSELF=1&Logout=Logout&THREAD_ID=" + thid
getUrl(baseurl + logout)
#-----------------------------------------------------
def getUrl(url):
try:
response = requests.get(url)
response.raise_for_status()
except HTTPError as http_err:
print('HTTP error occurred: '+ str(http_err))
except Exception as err:
print('Other error occurred:' + str(err))
else:
return response.content