哪些与 Windows 捆绑的工具可用于将文本文件上传到网络?

哪些与 Windows 捆绑的工具可用于将文本文件上传到网络?

我有一个文本文件,我想将其内容发布到网络服务器。我想使用 Windows 捆绑的应用程序来完成此操作。我不介意编写批处理脚本来执行此操作。但我不想为此任务添加新软件。

在 unix 领域中,有 curl 可以完成这项任务。

有什么想法或建议吗?

编辑:这需要在 Windows XP 和 Windows 7 中运行

答案1

发送带有“捆绑”组件的 POST 请求的一种方法是通过 PowerShell。由于不知道您通常如何发送它,我只能给出一个一般性的描述。

基本上,使用.NETWebClient类。

$wc = New-Object System.Net.WebClient;
$wc.UploadString($url, "POST", $data);

要发送文本文件的内容,请将其读入变量:

$data = [System.IO.File]::ReadAllText($filename);

如果您想模拟提交网络表单,您需要以下内容:

$wc.Headers.Add("Content-type", "application/x-www-form-urlencoded");

这通常需要键值对:

$data = "uploadeddata=" + [System.IO.File]::ReadAllText($filename);

这也可能有帮助:

wc.Encoding = System.Text.Encoding.UTF8;

Pastebin API 示例:

$url = "http://pastebin.com/api/api_post.php";
$filename = "test.txt";

$api_dev_key = "a Pastebin API dev key should go here";
$api_option = "paste";
$api_paste_code = [System.Uri]::EscapeDataString([System.IO.File]::ReadAllText($filename));

$data = "api_dev_key=" + $api_dev_key + "&api_option=" + $api_option + "&api_paste_code=" + $api_paste_code;

$wc = New-Object System.Net.WebClient;
$wc.Headers.Add("Content-type", "application/x-www-form-urlencoded");
$wc.UploadString($url, "POST", $data);

所有这些实际上都是基于我编写的 C# 程序,因此可能存在更短的方法。通常不需要“单行代码”。

在有人建议使用它Get-Content来读取文本文件之前,Get-Content它会返回一个每行一个字符串的数组。从中构建 POST 数据会比较困难。

答案2

尽管使用 Windows 中的脚本通过 HTTP 下载文件是关于从 CLI 下载文件,您也可以使用相同的工具进行上传:

因此,这应该可以工作(powershell):

$client = new-object system.net.webclient
$client.uploadFile("http://example.com", "C:\Full\Path\To\File.txt")

答案3

由于没有找到跨 Windows XP、Windows 7 和 Windows Server 2003 的跨平台解决方案,我们采用了使用Apache HTTP 客户端图书馆。

编译:

javac -cp "lib\httpclient-4.1.3.jar;lib\httpcore-4.1.4.jar;lib\httpmime-4.1.3.jar" HttpSubmitter.java

使用:

java -cp lib\httpclient-4.1.3.jar;lib\httpmime-4.1.3.jar;lib\httpcore-4.1.4.jar;lib\httpcore-4.1.4.jar;lib\commons-logging-1.1.1.jar;lib\commons-codec-1.4.jar;. HttpSubmitter "用户名" textfile1.txt textfile2.txt ... textfilen.txt

来源:

该文件将一些文件上传到Web服务器,返回的字符串是一个url,然后在Internet Explorer中打开。

import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;

public class HttpSubmitter {
  public static void main(String[] args) throws Exception {
    String username = null;
    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    MultipartEntity mpEntity = new MultipartEntity();
    int counter = 0;
    for (String filename: args) {
        // First parameter passed will be the username, the rest are files.
        if (username == null) {
            username = filename;
        } else {
            // Attach file contents to the message
            File file = new File(filename);
            ContentBody cbFile = new FileBody(file, "text/plain");
            mpEntity.addPart("userfile" + ++counter, cbFile);

        }
    }
    ContentBody cbUsername = new StringBody(username);
    mpEntity.addPart("username", cbUsername);
    String url = "http://example.com/endpoint";
    HttpPost httppost = new HttpPost(url);
    httppost.setEntity(mpEntity);
    System.out.println("executing request " + httppost.getRequestLine());

    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

    System.out.println(response.getStatusLine());
    if (resEntity != null) {
        // Returned string will be a URL, we pass it as a url to internet explorer
        // Please keep in mind the security implications of parsing a parameter you don't control to internet explorer.
        String confirmation_page = EntityUtils.toString(resEntity);
        String ie = "\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" " + confirmation_page;
        // Runtime.getRuntime().exec(ie);
        System.out.println(confirmation_page);

    }
    if (resEntity != null) {
        resEntity.consumeContent();
    }

    httpclient.getConnectionManager().shutdown();
  }
}

相关内容