Mã url python

Chức năng tải tệp lên máy chủ có nhiều mục đích khác nhau. Đối mặt với những kẻ tấn công, sau khi xâm nhập vào một hệ thống, chúng thường tải xuống các tập lệnh hoặc mã độc có nhiều chức năng nhằm đạt được mục đích nhất định nào đó. Đối với công việc tìm kiếm lỗi truy cập web của ứng dụng, pentester cũng nên thử tải lên các tệp có chứa payload cần thiết để tìm lỗi. Hay phản đối với quản trị viên, sau khi hoàn thành một chức năng nào đó, hãy tải tệp lên máy chủ để xem mã hoạt động có chính xác hay không

Có rất nhiều cách để tải tệp lên máy chủ, bạn có thể sử dụng nhiều thư viện có sẵn trong các ngôn ngữ lập trình khác nhau, hoặc đơn giản chỉ là sử dụng lệnh wget hoặc curl để lấy tệp từ bất kỳ nguồn nào. Bài viết này nhắm đến ai đó đang học và tìm hiểu về ngôn ngữ lập trình Python. Để tải tệp lên máy chủ, bạn có thể sử dụng thư viện PycURL


PycURL là một Python giao diện cho libcurl. PycURL có thể được sử dụng để tìm tải các đối tượng đã được xác định bằng URL từ chương trình Python, tương tự như urllib mô-đun Python. Phiên bản mới nhất của PycURL là 7. 45. 1. Việc cài đặt nó trên các bản phân phối của Linux rất dễ dàng

Request
  • Trăn 3. 5-3. 10
  • thư viện 7. 19. 0 hoặc mới hơn
Cài đặt

Chỉ cần sử dụng menu đơn giản

easy_install pycurl

Click to expand

hoặc

pip cài đặt pycurl

Click to expand

Dưới đây là một vài dòng mã đơn giản được viết trong Python để tải tệp lên máy chủ

con trăn

import pycurl
from io import StringIO

def do_http_request(method, url, post_data='', upload_file=None):
    ch = pycurl.Curl()
    buf = StringIO.StringIO()
    ch.setopt(ch.URL, url)
    ch.setopt(ch.CUSTOMREQUEST, method)
    if upload_file != None:
        ch.setopt(ch.HTTPPOST, [('file', (ch.FORM_FILE, upload_file['file_path'],
            ch.FORM_FILENAME, upload_file['file_name']))])
    else:
        if method == self.METHOD_POST:
            ch.setopt(ch.POSTFIELDS,  urlencode(post_data))

    ch.setopt(ch.TIMEOUT, 30)
    ch.setopt(ch.WRITEFUNCTION, buf.write)
    ch.perform()
    content = buf.getvalue()
    buf.close()
    ch.close()
    return content


Trong đó, upload_file là kiểu dữ liệu dict yêu cầu hai key file_path và file_name

ch. FORM_FILE. xác định đường dẫn đến tệp bạn muốn tải lên

ch. FORM_FILENAME. xác định tên của tệp bạn muốn tải lên

Để tìm hiểu chi tiết hơn về PycURL, bạn có thể tham khảo hướng dẫn công thức chính tại đây nhé

 

Mã hóa URL thường cần thiết khi bạn đang gọi một api từ xa với các chuỗi truy vấn hoặc tham số đường dẫn bổ sung. Mọi chuỗi truy vấn hoặc tham số đường dẫn được đặt trong URL phải được mã hóa URL chính xác

Mã hóa URL cũng được yêu cầu trong khi chuẩn bị dữ liệu để gửi với loại MIME

>> urllib.parse.quote('/')
'/'
0

Trong bài viết này, bạn sẽ tìm hiểu cách mã hóa các thành phần URL trong Python. Bắt đầu nào

Mã hóa URL chuỗi truy vấn hoặc tham số biểu mẫu trong Python (3+)

Trong Python 3+, Bạn có thể mã hóa URL bất kỳ chuỗi nào bằng hàm do gói cung cấp. Hàm

>> urllib.parse.quote('/')
'/'
1 theo mặc định sử dụng lược đồ mã hóa
>> urllib.parse.quote('/')
'/'
4

Hãy xem một ví dụ -

>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote(query)
'Hell%C3%B6%20W%C3%B6rld%40Python'

Lưu ý rằng, hàm

>> urllib.parse.quote('/')
'/'
1 coi ký tự
>> urllib.parse.quote('/')
'/'
6 là an toàn theo mặc định. Điều đó có nghĩa là, Nó không mã hóa ký tự
>> urllib.parse.quote('/')
'/'
6 -

>> urllib.parse.quote('/')
'/'

Hàm

>> urllib.parse.quote('/')
'/'
1 chấp nhận tham số có tên là safe có giá trị mặc định là
>> urllib.parse.quote('/')
'/'
6. Nếu bạn cũng muốn mã hóa
>> urllib.parse.quote('/')
'/'
6 ký tự, thì bạn có thể làm như vậy bằng cách cung cấp một chuỗi trống trong tham số an toàn như thế này-

>>> urllib.parse.quote('/', safe='')
'%2F'

Mã hóa các ký tự khoảng trắng thành dấu cộng (_______12_______1) bằng hàm >>> urllib.parse.quote('/', safe='') '%2F'2

Hàm

>> urllib.parse.quote('/')
'/'
1 mã hóa các ký tự khoảng trắng thành
>>> urllib.parse.quote('/', safe='')
'%2F'
4. Nếu bạn muốn mã hóa các ký tự khoảng trắng thành dấu cộng (
>>> urllib.parse.quote('/', safe='')
'%2F'
1), thì bạn có thể sử dụng một hàm khác có tên được cung cấp bởi gói
>> urllib.parse.quote('/')
'/'
2

>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'

Đọc. Khi nào mã hóa không gian thành dấu cộng (+) hoặc% 20?

Mã hóa nhiều tham số cùng một lúc

Bạn có thể mã hóa nhiều tham số cùng một lúc bằng chức năng. Đây là một hàm tiện lợi lấy từ điển các cặp giá trị khóa hoặc một chuỗi các bộ hai phần tử và sử dụng hàm

>>> urllib.parse.quote('/', safe='')
'%2F'
2 để mã hóa mọi giá trị. Chuỗi kết quả là một chuỗi các cặp
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
0 được phân tách bằng ký tự
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
1

Hãy xem một ví dụ -

>>> import urllib.parse
>>> params = {'q': 'Python URL encoding', 'as_sitesearch': 'www.urlencoder.io'}
>>> urllib.parse.urlencode(params)
'q=Python+URL+encoding&as_sitesearch=www.urlencoder.io'

Nếu bạn muốn hàm

>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
2 sử dụng hàm
>> urllib.parse.quote('/')
'/'
1 để mã hóa tham số, thì bạn có thể thực hiện như sau -

urllib.parse.urlencode(params, quote_via=urllib.parse.quote)

Mã hóa nhiều tham số cùng một lúc trong đó một tham số có thể có nhiều giá trị

Hàm

>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
2 nhận một đối số tùy chọn có tên là
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
5. Nếu đầu vào của bạn có thể có nhiều giá trị cho một khóa, thì bạn nên đặt đối số
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
5 thành
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
7 để tất cả các giá trị được mã hóa chính xác -

>>> import urllib.parse
>>> params = {'name': 'Rajeev Singh', 'phone': ['+919999999999', '+628888888888']}
>>> urllib.parse.urlencode(params, doseq=True)
'name=Rajeev+Singh&phone=%2B919999999999&phone=%2B628888888888'

Mã hóa URL trong Python 2. x

Trong Python 2. x các chức năng

>> urllib.parse.quote('/')
'/'
1,
>>> urllib.parse.quote('/', safe='')
'%2F'
2 và
>>> import urllib.parse
>>> query = 'Hellö Wörld@Python'
>>> urllib.parse.quote_plus(query)
'Hell%C3%B6+W%C3%B6rld%40Python'
2 có thể được truy cập trực tiếp từ gói
>>> import urllib.parse
>>> params = {'q': 'Python URL encoding', 'as_sitesearch': 'www.urlencoder.io'}
>>> urllib.parse.urlencode(params)
'q=Python+URL+encoding&as_sitesearch=www.urlencoder.io'
1. Các chức năng này đã được tái cấu trúc thành gói
>> urllib.parse.quote('/')
'/'
2 trong Python 3

Các ví dụ sau minh họa cách bạn có thể thực hiện mã hóa URL trong Python 2. x sử dụng các chức năng trên