Làm cách nào tôi có thể gửi / đăng tệp xml đến máy chủ cục bộ http: // localhost: 8080 bằng cách sử dụng curl từ dòng lệnh?
Tôi nên sử dụng lệnh nào?
Làm cách nào tôi có thể gửi / đăng tệp xml đến máy chủ cục bộ http: // localhost: 8080 bằng cách sử dụng curl từ dòng lệnh?
Tôi nên sử dụng lệnh nào?
Câu trả lời:
Nếu câu hỏi đó được kết nối với các câu hỏi Hudson khác của bạn, hãy sử dụng lệnh họ cung cấp. Cách này với XML từ dòng lệnh:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Bạn cần thay đổi một chút để đọc từ tệp:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Đọc trang hướng dẫn . theo một tham số trừu tượng cho -d.
-d / - dữ liệu
(HTTP) Gửi dữ liệu được chỉ định trong yêu cầu POST đến máy chủ HTTP, giống như cách trình duyệt thực hiện khi người dùng điền vào biểu mẫu HTML và nhấn nút gửi. Điều này sẽ khiến curl truyền dữ liệu đến máy chủ bằng cách sử dụng ứng dụng loại nội dung / x-www-form-urlencoding. So sánh với mẫu -F / -.
-d / - dữ liệu giống như --data-ascii. Để đăng dữ liệu hoàn toàn là nhị phân, thay vào đó bạn nên sử dụng tùy chọn --data-binary. Để mã hóa URL giá trị của trường biểu mẫu, bạn có thể sử dụng --data-urlencode.
Nếu bất kỳ tùy chọn nào trong số các tùy chọn này được sử dụng nhiều lần trên cùng một dòng lệnh, các phần dữ liệu được chỉ định sẽ được hợp nhất với nhau bằng một & -symbol riêng biệt. Do đó, sử dụng '-d name = daniel -d skill = lousy' sẽ tạo ra một đoạn bài đăng trông giống như 'name = daniel & skill = lousy'.
Nếu bạn bắt đầu dữ liệu bằng chữ cái @, phần còn lại sẽ là tên tệp để đọc dữ liệu từ hoặc - nếu bạn muốn cuộn tròn để đọc dữ liệu từ stdin. Nội dung của tệp phải được mã hóa URL. Nhiều tập tin cũng có thể được chỉ định. Do đó, việc đăng dữ liệu từ một tệp có tên 'foobar' sẽ được thực hiện với --data @foobar.
--header "Content-Type:application/xml"
mà bạn không mong đợi để mã hóa URL
-L
, đừng không sử dụng -X POST
vì nó sẽ làm cho chuyển hướng POST sử dụng yêu cầu quá. Nếu bạn chỉ sử dụng -d như @Tai gợi ý, điều này sẽ không xảy ra
-d
dải ngắt dòng từ các tập tin. Để tránh điều này, sử dụng --data-binary
thay thế.
Từ trang này , tôi tin rằng đây là những droid bạn đang tìm kiếm:
-F/--form <name=content>
(HTTP) Điều này cho phép cuộn tròn mô phỏng một biểu mẫu điền vào trong đó người dùng đã nhấn nút gửi. Điều này gây ra cong dữ liệu POST bằng cách sử dụng đa dữ liệu / biểu mẫu dữ liệu Kiểu nội dung theo RFC2388. Điều này cho phép tải lên các tệp nhị phân, v.v ... Để buộc phần 'nội dung' là một tệp, hãy đặt tiền tố tên tệp bằng dấu @.
Ví dụ, để gửi tệp mật khẩu của bạn đến máy chủ, trong đó 'mật khẩu' là tên của trường biểu mẫu mà / etc / passwd sẽ là đầu vào:
curl -F password=@/etc/passwd www.mypasswords.com
Vì vậy, trong trường hợp của bạn, đây sẽ là một cái gì đó như
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
này rất hữu ích nếu bạn muốn đưa tập tin của mình vào.
Bạn có thể sử dụng tùy chọn --data với tập tin.
Viết nội dung xml vào một tệp có tên là Soap_get.xml và sử dụng lệnh curl để gửi yêu cầu:
curl -X POST - tiêu đề "Loại nội dung: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
Với Jenkins 1,494, tôi đã có thể gửi một tập tin vào một tham số công việc trên Ubuntu Linux 12.10 sử dụng curl
với --form
các thông số:
curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
-Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
-Fsubmit=Build \
http://user:password@jenkinsserver/job/jobname/build
Trên máy chủ Jenkins, tôi đã cấu hình một công việc chấp nhận một tham số duy nhất: tham số tải lên tệp có tên myfileparam
.
Dòng đầu tiên của cuộc gọi curl đó xây dựng một biểu mẫu web với một tham số có tên myfileparam
(giống như trong công việc); giá trị của nó sẽ là nội dung của một tệp trên hệ thống tệp cục bộ có tên /local/path/to/your/file.txt
. Các @
tiền tố biểu tượng cho curl để gửi một tập tin địa phương thay vì tên tập tin nhất định.
Dòng thứ hai xác định một yêu cầu JSON khớp với các tham số biểu mẫu trên dòng một: tham số tệp có tên myfileparam
.
Dòng thứ ba kích hoạt nút Build của biểu mẫu. Dòng thứ tư là URL công việc với hậu tố "/ build".
Nếu cuộc gọi này thành công, curl trả lại 0
. Nếu không thành công, lỗi hoặc ngoại lệ từ dịch vụ được in ra bàn điều khiển. Câu trả lời này lấy rất nhiều từ một bài đăng trên blog cũ liên quan đến Hudson , mà tôi đã giải cấu trúc và làm việc lại cho nhu cầu của riêng tôi.
Đây là cách bạn có thể POST XML trên Windows bằng dòng lệnh curl trên Windows. Sử dụng tốt hơn tập tin batch / .cmd cho điều đó:
curl -i -X POST -H "Content-Type: text/xml" -d ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^> ^
^<Transaction^> ^
^<SomeParam1^>Some-Param-01^</SomeParam1^> ^
^<Password^>SomePassW0rd^</Password^> ^
^<Transaction_Type^>00^</Transaction_Type^> ^
^<CardHoldersName^>John Smith^</CardHoldersName^> ^
^<DollarAmount^>9.97^</DollarAmount^> ^
^<Card_Number^>4111111111111111^</Card_Number^> ^
^<Expiry_Date^>1118^</Expiry_Date^> ^
^<VerificationStr2^>123^</VerificationStr2^> ^
^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^> ^
^<Reference_No^>Some Reference Text^</Reference_No^> ^
^<Client_Email^>john@smith.com^</Client_Email^> ^
^<Client_IP^>123.4.56.7^</Client_IP^> ^
^<Tax1Amount^>^</Tax1Amount^> ^
^<Tax2Amount^>^</Tax2Amount^> ^
^</Transaction^> ^
" "http://localhost:8080"
Bạn có thể sử dụng lệnh này:
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json" 'API_SERVER_URL' -k
Nếu bạn đang sử dụng curl trên Windows:
curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
The contents of the file must already be URL-encoded.
Các tệp XML của OP chắc chắn không có.