Tôi có một url mà tôi cần thêm một chìa khóa api là một tham số. Khóa có% và các ký tự khác trong đó và không được mã hóa url
Điều đó không đúng. Nó phải được mã hóa URL. Nếu không, bạn kết thúc bằng URL không hợp lệ hoặc URL không có nghĩa là bạn muốn.
Ví dụ: giả sử khóa là 123%456%789
. Nếu bạn gửi http://www.domain.com/service/?format=json&key=123%25456%25789
, dịch vụ web ở đầu bên kia sẽ nhận được 123%456%789
, sẽ thành công. Nếu bạn chỉ cần gửi http://www.domain.com/service/?format=json&key=123%456%789
, dịch vụ web ở đầu bên kia sẽ nhận được 123E6x9
, điều này sẽ không thành công.
Vì vậy, ví dụ của bạn đã chính xác và bạn không cần phải làm gì cả.
Nếu vì một lý do nào đó, bạn đã mã hóa URL APP_KEY
trước khi bạn đến đây… tốt, đừng. Với một cái tên như thế, tôi đoán đó là một chữ thường được sao chép và dán vào mô-đun của bạn, điều đó có nghĩa là bạn phải mã hóa URL theo cách thủ công và sao chép và dán kết quả. Chỉ cần không làm điều đó, và bạn ổn.
Nếu bạn nhận được APP_KEY
ở dạng mã hóa URL, bạn luôn có thể giải mã bằng, ví dụ: urlparse.parse_qs
hoặc thậm chí với furl
.
Nhưng nếu không ai trong số đó có vẻ hợp lý ...
là có một cách để làm điều này với furl?
No. Xem phần Encoding của tài liệu. furl
chỉ hoạt động trên được giải mã tên và giá trị chuỗi truy vấn.
Nhưng có một cách dễ dàng xung quanh việc này. URL không phải là điều phức tạp và furl
được thiết kế đặc biệt để cho phép bạn kết hợp và khớp các bit được tạo theo cách thủ công và theo lập trình. Hầu hết các ví dụ trong số README hiển thị chính xác điều đó, chẳng hạn như furl('http://www.google.com/?one=1').add({'two':2}).url
. Vì vậy, nếu bạn đã có một tiền mã hóa "key=123%25456%25789"
từ một nơi nào, chỉ cần dính vào nó trên chuỗi bằng tay trước khi đưa nó vào furl
:
request_url = furl('http://www.domain.com/service/?key={}'.format(APP_KEY)) \
.add({
'format' : 'json',
'location' : address_line_1 + ',' + city + ',' + state,
}).url
Hacky? Vâng, vâng, trong đó bạn đang bước bên furl
's mã hóa, nhưng đó là chính xác những gì bạn đang yêu cầu làm thế nào để làm.
Nhưng những ký tự đó _have_ sẽ được mã hóa URL nếu bạn muốn đây là URL hợp lệ (và hoạt động). Hãy tưởng tượng khóa API của bạn là, '123% 456% 789'. Nếu bạn chỉ sử dụng 'http: //www.domain.com/service/? Format = json & location = blah & key = 123% 456% 789', máy chủ sẽ thấy' khóa = 123E6x9'. – abarnert
Có thể bạn không làm điều này một cách chính xác. Lý do để sử dụng một thư viện URL là để mã hóa không phải là một cái gì đó mà bạn thậm chí không kỹ thuật phải được nhận thức. –
@ChrisDutrow: Công bằng, 'furl' được thiết kế để cho phép bạn trộn và kết hợp các chuỗi truy vấn được tạo theo cách thủ công và lập trình (ví dụ đầu tiên của chúng là tạo URL từ một chuỗi đã có'? One = 1' trên cuối cùng, và sau đó thêm 'hai = 2' theo nhiều cách khác nhau). – abarnert