1. 程式人生 > 實用技巧 >【python + NATAPP】實現內網穿透的簡易資料傳輸

【python + NATAPP】實現內網穿透的簡易資料傳輸

1. 服務端

接收兩張影象的地址,返回這兩張影象的相似度

import os, shutil, requests
import cv2
import numpy as np
import imgs_similari_api
from flask import Flask,render_template,request def cleanfiles(temproot):
if os.path.exists(temproot):
shutil.rmtree(temproot)
os.makedirs(temproot) app = Flask(__name__) @app.route("/")
def index():
return render_template("index.html") @app.route("/imgsimilar",methods = ['GET', 'POST'])
def login():
if request.method == "POST":
imgurl1 = request.form.get('imgurl1')
imgurl2 = request.form.get('imgurl2')
print(imgurl1)
print(imgurl2)
print('downing ... ...')
r = requests.get(imgurl1)
r.raise_for_status()
# clean files
cleanfiles('./tempimgs')
with open('./tempimgs/abc1.jpg','wb') as f:
f.write(r.content)
f.close()
r = requests.get(imgurl2)
r.raise_for_status()
with open('./tempimgs/abc2.jpg','wb') as f:
f.write(r.content)
f.close()
image1 = cv2.imread('./tempimgs/abc1.jpg')
image2 = cv2.imread('./tempimgs/abc2.jpg')
print('computing ... ...')
value_img_similar = imgs_similari_api.classify_hist_with_split(image1, image2)
return {'sorce':str(value_img_similar)}
else:
return "<h1>login Failure !</h1>" if __name__ == '__main__':
host = '127.0.0.1'
port = '8888'
app.run(debug=True, host=host, port=port)

2. 內網穿透

使用NATAPP的免費服務,先去註冊,在依次進入“我的渠道”>>“購買渠道”>>“免費渠道”,設定一下埠就可以購買了。

接下來下載客戶端和配置config.ini,只需要修改authtoken,換成你自己的authtoken。

執行客戶端

獲得對映網址,如:http://aaa.natappfree.cc -> 127.0.0.1:8888(8888為購買時設定的埠)(注意:每次開啟內網穿透服務,地址會變化!!!)

3. 客戶端

#coding=utf-8
import requests s = requests data={'imgurl1':'https://ps.ssl.qhmsg.com/bdr/720__/t017843e759f2628d1f.jpg', 'imgurl2':'https://ps.ssl.qhmsg.com/bdr/720__/t017843e759f2628d1f.jpg'}
r = s.post('http://aaa.natappfree.cc/imgsimilar', data) print(r.text)

4. 執行

實際的步驟是先搞定內網穿透,再寫好服務端和客戶端程式(本文的服務端程式缺少計算影象相似度演演算法不能執行,僅作示意)。

總結就是:開啟內網穿透服務>>開啟服務端服務>>客戶端呼叫

現在全球各地都可以通過這個方式呼叫你寫好的功能了!!!